mysql聚合索引失效
索引是可以高效的获取数据的数据结构, 对查询有很大作用. 索引对于数据库, 就像偏旁部首, 或者26个英文字母对于字典一样, 能很快的提高查询速度.但是索引也有它的缺点:首先就是占用磁盘空间其次是虽然...
2024.11.15为了验证在哪些情况下会导致索引失效,这里我们借助了一个分析关键字 explain来进行分析。explain的用法是在执行SQL语句之前加上这个关键字即可。如下所示。
explain select * FROM `sys_oper_log`并且其查询结果列如下
id:选择标识符,id越大优先级越高,越先被执行。select_type:表示查询的类型table:输出结构的表partitions:匹配分区type:表示表的连接类型possible_keys:表示查询的时候可能用到的索引key:表示实际使用索引key_len:索引字段的长度ref:列与索引的比较rows:大概估计的执行行数filtered:按照条件过滤表的百分比Extra:执行情况描述说明其中比较重要的字段就是type,type有以下的一些值
all:表示全表扫描index:表示索引遍历range:表示范围查找index_subquery:在子查询中使用了refunique_subquery:在子查询中使用了eq_refref_or_null 对null进行了索引优化的reffulltext 使用全文索引ref 使用了非唯一性索引查找eq_ref:在join中使用了主键或者是唯一键关联const:将一个主键放到了where的后面作为查询条件。索引失效情况一:非最左匹配所谓的最左匹配是指以最左边的起点字进行查询可以使用联合索引,否则就不能使用联合索引。
这里我们假设使用索引的字段顺序是A+B+C,如果是最左匹配那么如下的一些索引都会被使用到到
A+B+CA+BA+C但是对于B+C的操作则不能使用到联合索引,这就是最左匹配原则。
索引失效情况二:错误的使用了模糊查询我们常用的模糊查询的匹配方式有如下几种
like ‘张%‘like ‘%张‘like ‘%张三%‘这三种情况只有第一种情况会用到索引,其他的则不会使用到索引
索引失效情况三:进行了列运算如果在执行SQL的过程中使用索引列使用了运算,那么就会导致索引失效。
例如在执行使用id查询的时候执行了如下的操作。
select * operation_log where id+1=2索引失效情况四:使用了函数在进行查询的时候,如果查询列使用了任意的MySQL函数都会导致索引失效,例如,在有些判断中使用了count函数。
索引失效情况五:进行了类型转换如果在查询的时候对索引列进行了类型的转换那么也不会使用索引,例如我们将一个string类型的数据转换成了一个int类型的数据,则不会触发索引。
索引失效情况六:使用 is not null当在一个查询中出现了 is not null 的时候也会导致使用的索引失效的情况发生。例如在我们查询某些数据的时候会使用到 is not null 来判断数据字段是否为空。
索引是可以高效的获取数据的数据结构, 对查询有很大作用. 索引对于数据库, 就像偏旁部首, 或者26个英文字母对于字典一样, 能很快的提高查询速度.但是索引也有它的缺点:首先就是占用磁盘空间其次是虽然...
2024.11.15概述分享一下之前笔记记录的一些不同类型sql语句优化方法,针对mysql。主要分成优化insert语句、优化ORDER BY语句、优化GROUP BY 语句、优化嵌套查询、优化OR语句这几个方面,可能...
2024.11.151、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2、应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描...
2024.11.151 前言基础不牢,地动山摇!!!索引是Mysql提高查询效率的一大利器(针对innodb引擎,以下相同),对于多条件查询的情况,我们可以创建联合索引进一步提高查询效率,但如果使用不当,联合索引就会失效...
2024.11.11为了验证 MySQL 中哪些情况下会导致索引失效,我们可以借助 explain 执行计划来分析索引失效的具体场景。explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字即...
2024.11.15