首页 > 试题广场 >

下列哪条语句不会引起mysql的索引失效

[单选题]

下列哪条语句不会引起mysql的索引失效

  • select username,count(*) from user group by username having count(*)>1;

  • select * from user order by addtime desc;

  • select * from user where id is not null;

  • select * from user where id=1 or username=’zhangsan’;

查询 SQL 尽量不要使用 select *,而是 select 具体字段
哪些情况会不走索引
Like:%在前面的话不走索引,%在后面的话还是会走索引的
索引列有计算操作,不走索引
索引列使用了函数,不走索引
索引列使用了不等(!=)符号,不走索引
不满足联合索引的最左前缀原则,不走索引(最重要!原理就靠它了)
or操作,不走索引(可以用union替代)
索引列的字段具体值为null,不走索引,进行全表扫描(很关键)
字符串列与数字直接比较,字段属性是字符,但是你用数据类型去比较,不走索引(因为隐式类型转换,mysql5.7之后是可以使用到索引的)
order by操作的索引列如果也在where条件里,则不走索引
对于联合索引,范围查询如between、>、< 这些条件,会造成后面的索引字段失效
————————————————
版权声明:本文为CSDN博主「爱吃鱼饼的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45325628/article/details/122930369

编辑于 2022-04-18 21:22:06 回复(0)
  1. select username, count() from user group by username having count() > 1; 这条语句不会引起 MySQL 的索引失效。尽管在统计每个用户名的记录数量时使用了聚合函数 count(*),但是由于在 group by 子句中已经指定了 username 列,MySQL 可以利用该列上的索引进行分组操作。

  2. select * from user order by addtime desc; 这条语句可能会引起 MySQL 的索引失效。当对结果进行排序时,如果没有对 addtime 字段创建索引,或者因为其他原因导致 MySQL 优化器决定不使用该索引,那么可能会导致索引失效。

  3. select * from user where id is not null; 这条语句不会引起 MySQL 的索引失效。尽管条件id is not null并不是一个精确的值,但是 MySQL 可以利用该列上的索引进行判断,以过滤掉为 NULL 的记录。

  4. select * from user where id = 1 or username = 'zhangsan'; 这条语句可能会引起 MySQL 的索引失效。由于使用了or条件连接两个不同的列,MySQL 可能无法有效使用索引来加速查询。具体是否会导致索引失效还取决于列 id 和 username 是否都有适当的索引。

发表于 2023-09-01 11:11:03 回复(0)
IS NOT NULL 不会失效???
发表于 2022-07-17 16:07:53 回复(0)