mysql count 不走索引_sql中不走索引情况

where 用到的字段没创建索引,就不走索引。

下面这三种情况也会走索引。

where field1 like '%abc%' --like %

where substr(field1,1)='a' --函数

where field1 in ('a','b','c') --in

索引列有函数处理或隐式转换,不走索引

索引列倾斜,个别值查询时,走索引代价比走全表扫描高,所以不走索引

索引列没有限制 not null,索引不存储空值,如果不限制索引列是not null,oracle会认为索引列有可能存在空值,所以不会按照索引计算)

1、查询谓词没有使用索引的主要边界,可能会导致不走索引。比如,你查询的是SELECT * FROM T WHERE Y=XXX;假如你的T表上有一个包含Y值的组合索引,但是优化器会认为需要一行行的扫描会更有效,这个时候,优化器可能会选择TABLE ACCESS FULL,但是如果换成了SELECT Y FROM T WHERE Y = XXX,优化器会直接去索引中找到Y的值,因为从B树中就可以找到相应的值。

2、如果在B树索引中有一个空值,那么查询诸如SELECT COUNT(*) FROM T 的时候,因为HASHSET中不能存储空值的,所以优化器不会走索引,有两种方式可以让索引有效,一种是SELECT COUNT(*) FROM T WHERE XXX IS NOT NULL或者是不能为空。

3、如果在T表上有一个索引Y,但是你的查询语句是这样子SELECT * FROM T

你可能感兴趣的:(mysql,count,不走索引)