12种索引失效场景总结

mp_index_diss

哈喽,大家好🎉,我是世杰

本文我为大家介绍的「索引失效的12种常见场景

我们在日常开发过程中,时不时都会踩到 Mysql 数据库不走索引的坑。

常见的现象就是:明明在字段上添加了索引,但却并未生效。甚至于同一条SQL语句,在某些参数下生效,在某些参数下不生效,这是为什么呢?

这篇文件将常见的12种不走索引情况进行汇总,并以实例展示,帮助大家更好地避免踩坑。

1. 数据准备

1.1 创建表结构

为了逐项验证索引的使用情况,我们先准备一张表t_user:

CREATE TABLE `t_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `id_no` varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '身份编号',
  `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `union_idx` (`id_no`,`username`,`age`),
  KEY `create_time_idx` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

在上述表结构中有三个索引:

  • id:为数据库主键;
  • union_idx:为id_no、username、age构成的联合索引;
  • create_time_idx:是由create_time构成的普通索引;

1.2 初始化数据

创建存储过程,方便批量插入数据,用来验证数据比较多的场景

-- 删除历史存储过程
DROP PROCEDURE IF EXISTS `insert_t_user`

-- 创建存储过程
delimiter $

CREATE PROCEDURE insert_t_user
回答: 索引失效的几种场景包括以下几种情况: 1. 没有使用索引的列:如果查询条件中没有使用到索引的列,那么索引将无法起到作用。例如,在一个多列索引中,如果查询条件没有使用到索引的第一个列,那么整个索引将无法被使用\[1\]。 2. 对多个索引进行排序:当对多个索引进行排序时,如果这些索引具有不同的排序规则,那么索引将失效。例如,在一个联合索引中,如果对其中的字段进行不同的排序规则,那么索引将无法被使用\[2\]。 3. 使用函数或表达式:如果在查询条件中使用了函数或表达式,那么索引将无法被使用。因为索引是基于列的值进行建立的,而函数或表达式会改变列的值,导致索引无法匹配\[1\]。 4. 数据类型不匹配:如果查询条件中的数据类型与索引列的数据类型不匹配,那么索引将无法被使用。例如,如果索引列是字符串类型,而查询条件中使用了数值类型,那么索引将无法匹配\[1\]。 总结来说,索引失效的几种场景包括没有使用索引的列、对多个索引进行排序、使用函数或表达式以及数据类型不匹配。在设计和使用索引时,需要注意这些场景,以避免索引失效,提高查询性能\[1\]\[2\]\[3\]。 #### 引用[.reference_title] - *1* [索引失效的几种情况](https://blog.csdn.net/dd2016124/article/details/125076815)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [索引失效的10种场景](https://blog.csdn.net/weixin_55076626/article/details/126416509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员世杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值