
MySQL中常见的慢查询与优化
没有将等值条件列用做组合索引前缀如果查询语句的谓词条件是范围条件与等值条件,存在组合索引,那么当范围条件列作为索引前缀的时候,等值条件是无法被range optimizer用来生成引擎扫描range减少扫描行数的。
索引列类型和常量类型不一致当索引列类型和常量类型不一致的时候,可能导致索引无法使用。例如下面的例子,列类型是varchar,而常量类型是Int。在MySQL中varchar类型和int类型比较是会将varchar转换为int类型去比较,这就导致下面语句需要扫描每一行数据将id转换为int类型再做比较。
关联字段类型不一致对于JOIN操作,如果关联字段类型不一样,比如一个是Int,一个是varchar,由于比较类型是Int,那么varchar字段的关联索引就无法用来生成REF访问,减少扫描行数。
关联字段字符集不一致对于JOIN操作,如果关联字段的字符集不一致,这也会导致索引无法被有效利用,进而导致扫描大量数据,查询执行慢。
索引列上有表达式计算当谓词条件中,索引列上有表达式计算的时候,优化器会无法分析抽取range
range optimizer限制索引 ...




