书接上回,接着聊聊SQL优化流程中需要注意的那些部分
四、收集表统计信息
收集表的统计信息
ANALYZE TABLE table_name;
使用抽样建立统计信息
ANALYZE TABLE table_name ESTIMATE STATISTICS SAMPLE 10 PERCENT;
仅对主要column与索引建立统计信息
ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL INDEXED COLUMNS;
ANALYZE TABLE table_name COMPUTE STATISTICS FOR ALL INDEXES;
五、SQL改写,创建索引
创建合适的索引:
创建索引的目的是改变访问路径,减少访问路径上花费的成本。
适合建索引的列需满足下列条件:
1,WHERE条件中的列
2,列上数据选择性好,选择性可以用不重复值的数量/总行数来表示,比值越接近于1,选择性越好。
六、使用Hint选择执行计划:
1.常用Hint——访问路径
FULL( table_name )
当指定了FULL( table_name ) Hint时,优化器对指定的表进行全表扫描;只能指定一个表。
INDEX( table_name [ , ] [ index_name [ [ , ] index_name ] ] )
优化器对指定的表进行索引扫描,可以指定索引或不指定索引,可以指定多个索引;
当指定多个索引时,优化器根据统计信息选择成本最低的索引;
不指定索引时,优化器评估该表上的所有索引,然后选择成本最低的索引。
INDEX_ASC( table_name [ , ] [ index_name [ [ , ] index_name ] ] )
按照顺序扫描索引,如果创建索引时选择的是顺序索引,则扫描结果是顺序的;
如果创建索引时选择的时逆序索引,则扫描结果是逆序的。
INDEX_DESC( table_name [ , ] [ index_name [ [ , ] index_name ] ] )
与INDEX_ASC相反。
INDEX_COMBINE( table_name [ , ] [ index_name [ [ , ] index_name ] ] )
优化器对指定的表的OR语句进行切分,分别执行索引扫描然后合并结果。
IN_KEY_RANGE( table_name [ , ] [ index_name [ [ , ] index_name ] ] ) 使用In Key Range扫描,需要有IN 子句。
ROWID( table_name ) 使用ROWID访问路径,需要有ROWID的等值条件。
2.常用Hint——关联顺序
ORDERED
优化器选择关联顺序时,与SQL语句中表的关联顺序一致。
ORDERING( table_name [ , table_name [ , table_name [ LEFT | RIGHT ] ] ] )
优化器选择关联顺序时,按照Hint中提示的表顺序进行关联。
第一个表和第二个表不能选择表位置选项,从第三个表开始可以选择表关联时的位置。
关联位置包括LEFT和RIGHT,LEFT将表置于关联的左边节点(Outer node);
RIGHT将表置于关联的右边节点(Inner node)。
不指定位置信息时,按照估算成本最低选择。
LEADING( table_name [ [ , ] table_name ] )
与ORDERING类似,但不能指定关联位置,只能指定关联顺序
3.常用Hint——关联方法
USE_HASH( table_name [ [ , ] table_name ] )
在指定的表进行关联时,优化器会选择HASH JOIN;
至少需要指定一个表,同一个表不能重复出现;
进行关联的两个表各自用Hint指定了不同的关联方法时,依据表的关联顺序,选择右节点(Inner node)的关联方法。
USE_HASH_IN( alias )
在对指定的别名执行关联时,优化器选择HASH JOIN;aliase做右节点(Inner node)。
alias可以是表、表别名、视图、视图别名、关联子查询别名等。
USE_HASH_OUT( alias )
在对指定的别名执行关联时,优化器选择HASH JOIN,并且让alias做左节点(Outer node)。
USE_MERGE( table_name [ [ , ] table_name ] )
USE_MERGE_IN( alias )
USE_MERGE_OUT( alias )
USE_NL( table_name [ [ , ] table_name ] )
USE_NL_IN( alias )
USE_NL_OUT( alias )
登录后发表回复
实战技巧,解锁数据库性能瓶颈
文章
4阅读量
39获赞
4DB性能侠 2024-07-29
DB性能侠 2024-07-26
DB性能侠 2024-07-26
DB性能侠 2024-07-24