28
votes
EXPLAIN ANALYZE shows no details for queries inside a plpgsql function
The correct syntax for the EXPLAIN call needs a SELECT. You can't just write the bare function name in SQL:
EXPLAIN ANALYZE SELECT f1();
Optimization
PL/pgSQL functions are black boxes to the query ...
23
votes
Accepted
what is "planSummary: IDHACK"?
It is just informing that mongod has chosen to use the _id index.
More specifically: IDHACK means that normal query plan path (evaluation, caching, re-evaluation) was bypassed for the query shape {...
23
votes
Accepted
Why is count(*) slow, when explain knows the answer?
Explain is using previously gathered statistics (used by the query optimizer). Doing a select count(*) reads EVERY data block.
Here's a cheap way to get an estimated row count:
SELECT table_rows
FROM ...
18
votes
Accepted
Selecting top 10 from indexed field of a big table takes too long
In your sample code above, the index is explicitly created as NULLS LAST and the query is implicitly running NULLS FIRST (which is the default for ORDER BY .. DESC) so PostgreSQL would need to re-...
12
votes
Accepted
Clustered Index Scan (Clustered) vs. Index Seek (NonClustered) + Key Lookup (Clustered)
Because the majority of the table fits the criteria for the first query, so it is more efficient to scan the clustered index rather than do key lookups for each of the rows that match the criteria.
...
11
votes
Accepted
Why does a SELECT statement dirty cache buffers in Postgres?
This has a simple reason.
In PostgreSQL a row has to go through a visibility check. On the first read, the system checks if a row can be seen by everybody. If it is, it will be "frozen". This is ...
11
votes
Accepted
What does "Heap Block" in "Bitmap Heap Scan" mean?
Bitmaps can either store a bitmap of rows, or if that becomes too large to fit in work_mem it can "go lossy" by storing a bitmap of blocks. It can do this selectively, so some blocks can be converted ...
10
votes
MySQL Explain has different row count than slow query log
In order to answer this question, you must understand what the rows column on explain means, and the difference between calculations based on statistics and post-execution statistics.
When you run ...
8
votes
Accepted
Width in Postgres EXPLAIN?
Answer is in the article you are referring to:
Here the planner has decided to use a two-step plan: the child plan
node visits an index to find the locations of rows matching the index
...
8
votes
Accepted
Postgres EXPLAIN ANALYZE is super slow
If you only want to look at the execution plan, run EXPLAIN without ANALYZE.
ANALYZE will cause the query to be executed, which provides much more useful data, but takes as long as the query runs.
7
votes
Accepted
MongoDB explain winning plan shows "EOF"
Ok, I found out why. Apparently I was querying against the admin database. Always run use <db> guys
7
votes
Accepted
Non-deterministic performance of query on select, from 1s to 60s on table with 1 billion rows
Explanation
The all-important difference between the two query plans is the added read=xyz bit in multiple places of the slow version.
Slow:
Buffers: shared hit=116296 read=42298
Fast:
Buffers: ...
6
votes
conditional subquery
Evan already pointed out that you may have overlooked the (never executed) in the output of EXPLAIN ANALYZE.
A cleaner and more versatile way to write your query in modern Postgres would be with a ...
6
votes
Accepted
What's actually happening in the "Result" node and "Append" in a Postgres plan?
The Append has to do some buffer management. It also makes a lot of calls to some clock function (gettimeofday, for example), to satisfy the timing component of EXPLAIN ANALYZE. That overhead might ...
6
votes
Accepted
Does SQL Server Management Studio 2017 Contain a New Explain Feature
No, not a feature - it's turning one of these on:
SET SHOWPLAN_TEXT ON;
SET STATISTICS PROFILE ON;
The SHOWPLAN_TEXT option and STATISTICS PROFILE option are well-documented and have been around ...
5
votes
Why am I getting `Impossible WHERE noticed after reading const tables` in explain query?
MySql Explain uses the values you provide, literally, to traverse rows of the associated tables. If you provide a constant/key value which is not in the associated table, MySql Explain will stop with ...
5
votes
Accepted
What do the shared buffers metrics for various types of index scans represent?
In this case, it's doing an Index Scan. As best as I know, the difference between an Index scan and a Bitmap Index/Heap Scan is that the former will read pages in the order defined by the index, while ...
5
votes
Accepted
conditional subquery
There are three important parts to reading query plans here,
Did it run. If so,
How many times?
Was it correlated?
Sample Data
You didn't provide any sample data, so let's create some.
CREATE ...
5
votes
Why is count(*) slow, when explain knows the answer?
Explain gets the number from some "statistics" that are used to estimate things for the Optimizer. That number can be far from correct -- I sometimes see it being more than a factor of 2 (higher or ...
5
votes
Accepted
What does "Rows Removed by Index Recheck" without "lossy" mean?
Some index strategies don't definitely conclude that a tuple meets the criteria. They can definitely and rapidly eliminate most tuples which provably can't meet the criteria (which is where the ...
4
votes
Accepted
Monitoring the Postgres query parser
It's not possible to save query plans "for all future sessions". Query plans are only ever saved for the current session. And only reused under a number of favorable conditions.
Plans for ad-hoc SQL ...
4
votes
Accepted
Unit of COST in an Oracle execution plan
Unfortunately the answers are as follows:
Is there a unit for cost in an Oracle execution plan?
Not really.
I mean if the cost of an operation is 50 then can I map this number to CPU cycles or ...
4
votes
Accepted
Index not used on partitioned table
There are a few problems here:
First, as jkavalik says in the comments on the OP, the order of columns in an index matters. Basically, in your case for index_rqcd to be used for filtering on rq_date,...
4
votes
Accepted
Slow Performance On Update SQL Server
You've got some code, somewhere, converting your ID to an NVARCHAR(32) field. I don't know how or why this is happening, but that's causing it to ignore your index, resulting in a full scan instead of ...
4
votes
Accepted
Why is AWS RDS' maximum auto_explain.log_min_duration parameter 214783?
This is not specific to AWS RDS (well part of it specific to that), it is in the upstream code.
The setting is restricted to INT_MAX / 1000. But I can't figure out why, as that setting is never ...
4
votes
Accepted
Is non-dynamic scalar subquery evaluted for each row?
It is evaluated once.
EXPLAIN ANALYZE will display lines like these:
...
InitPlan 1 (returns $0)
-> Index Scan using t2_pkey on t2 (cost=0.29..5.31 rows=1 width=4) (actual time=0.024..0.025 ...
4
votes
Accepted
Complex `where` dramatically affects query performance
There are two things that jump out immediately with the information_schema Details:
MyISAM
differing collations
Regarding MyISAM
When there is a JOIN between MyISAM and InnoDB, the InnoDB tables ...
3
votes
mysql query choosing an incorrect execution plan
Use a composite index:
INDEX(confirmada, codTipoTransaccion, idTransaccionOriginal, idTransaccion)
The columns can be in any order, so I recommend shuffling them to meet other need(s) and/or ...
3
votes
Accepted
Mysql Index for concat select
Assuming that card_no and log_entry have VARCHAR or CHAR type, I would first add an index on (card_no, date, last_entry):
ALTER TABLE entry_log
ADD INDEX card_no__date__last_entry__ix
(card_no, ...
3
votes
Mysql Index for concat select
Cleanse your data before storing it. Otherwise, INDEXes may be useless.
I this particular case, the TRIM function is hiding card_no, making the INDEX on card_no useless.
This SELECT would run a lot ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
explain × 207postgresql × 82
mysql × 70
performance × 47
index × 33
optimization × 31
query-performance × 26
execution-plan × 22
oracle × 20
postgresql-performance × 15
join × 8
oracle-11g-r2 × 7
index-tuning × 7
mysql-5.7 × 6
mongodb × 5
mariadb × 5
select × 5
subquery × 5
postgresql-9.6 × 5
sql-server × 4
update × 4
postgresql-9.4 × 4
delete × 4
postgresql-10 × 4
temporary-tables × 4