开发者社区> 问答> 正文

为啥我查询时,有过滤条件,也建了索引,但它就是不走索引?

为啥我查询时,有过滤条件,也建了索引,但它就是不走索引?

展开
收起
茶什i 2019-11-20 15:03:34 931 0
1 条回答
写回答
取消 提交回答
  • 注意两点: 数据分布、统计信息 很多时候,统计信息不全会导致优化器计算执行代价的时候算错,误认为走索引会比全表慢,造成执行计划不对。 统计信息的收集方法: 某用户下的所有索引: 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上,做完后收集统计信息,就走索引了。

    2019-11-20 15:03:44
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
RowKey与索引设计:技巧与案例分析 立即下载
Phoenix 全局索引原理与实践 立即下载
低代码开发师(初级)实战教程 立即下载