注意两点: 数据分布、统计信息 很多时候,统计信息不全会导致优化器计算执行代价的时候算错,误认为走索引会比全表慢,造成执行计划不对。 统计信息的收集方法: 某用户下的所有索引: DBMS_STATS.GATHER_SCHEMA_STATS('SSCKF',100,TRUE,'FOR ALL INDEXED SIZE AUTO');
某用户下所有字段(包括索引): DBMS_STATS.GATHER_SCHEMA_STATS('SSCKF',100,TRUE,'FOR ALL COLUMNS SIZE AUTO'); 某表下的所有字段: DBMS_STATS.GATHER_TABLE_STATS('SSCKF','FO_ACCOUNTBILL',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');
收集某一列的统计信息 sp_col_stat_init('JXWOA','OA2_RECEIVEDOC','RD_STATE'); sp_col_stat_init('JXWOA','OA2_SENDDOC','SD_STATE');
有个朋友自己做了10W条测试数据,然后写了个SELECT * FROM T WHERE C='A';这样的测试语句。 但这10W条数据全是一样的,怎么可能走索引。 修改测试数据的脚本,让C这个字段的值平均分布在1~1000上,做完后收集统计信息,就走索引了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。