How do you interpret a query's explain plan?

后端 未结 11 1680
鱼传尺愫
鱼传尺愫 2020-12-02 05:12

When attempting to understand how a SQL statement is executing, it is sometimes recommended to look at the explain plan. What is the process one should go through in interpr

相关标签:
11条回答
  • 2020-12-02 05:39

    The output of the explain tells you how long each step has taken. The first thing is to find the steps that have taken a long time and understand what they mean. Things like a sequential scan tell you that you need better indexes - it is mostly a matter of research into your particular database and experience.

    0 讨论(0)
  • 2020-12-02 05:43

    I mainly look for index or table scans. This usually tells me I'm missing an index on an important column that's in the where statement or join statement.

    From http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p1.aspx:

    If you see any of the following in an execution plan, you should consider them warning signs and investigate them for potential performance problems. Each of them are less than ideal from a performance perspective.

    * Index or table scans: May indicate a need for better or  additional indexes.
    * Bookmark Lookups: Consider changing the current clustered index,
      consider using a covering index, limit
      the number of columns in the SELECT
      statement.
    * Filter: Remove any functions in the WHERE clause, don't include wiews
      in your Transact-SQL code, may need
      additional indexes.
    * Sort: Does the data really need to be sorted? Can an index be used to
      avoid sorting? Can sorting be done at
      the client more efficiently? 
    

    It is not always possible to avoid these, but the more you can avoid them, the faster query performance will be.

    0 讨论(0)
  • 2020-12-02 05:49

    look at the percentage of time spent in each subsection of the plan, and consider what the engine is doing. for example, if it is scanning a table, consider putting an index on the field(s) that is is scanning for

    0 讨论(0)
  • 2020-12-02 05:55

    This subject is too big to answer in a question like this. You should take some time to read Oracle's Performance Tuning Guide

    0 讨论(0)
  • 2020-12-02 05:58

    One "Oh no, that's not right" is often in the form of a table scan. Table scans don't utilize any special indexes and can contribute to purging of every useful in memory caches. In postgreSQL, for example, you will find it looks like this.

    Seq Scan on my_table  (cost=0.00..15558.92 rows=620092 width=78)
    

    Sometimes table scans are ideal over, say, using an index to query the rows. However, this is one of those red-flag patterns that you seem to be looking for.

    0 讨论(0)
提交回复
热议问题