mysql 索引无效的情况

下面几种情况下,索引是不会被使用的

(1)组合索引,查询时的条件列不是组合索引中的第一个列

例如 组合索引 (a,b),查询中使用了b作为查询条件,这时是不会用到索引的,如果用a作为查询条件,则会使用索引

(2)like查询中关键字前面带有‘%’

例如 a字段为索引,使用like查询,where a like '%xxx',这时就不会使用索引

where a like 'xxx%',这时则会使用索引

而在大量模糊查询中经常会用到 '%xxx%' 这个形式,所以建议少使用like,而使用支持中文的全文检索技术 sphinx

(3)or 中如果有字段不是索引字段,则不会使用索引

例如 a字段为索引,查询 where a='x' or b='y',虽然a是索引,但b不是,这时就不会使用索引

(4)查询字符串类型的字段时,如果值不用单引号引起来,则不使用索引

例如:a字段为字符串类型,并为索引,查询 where a=111,可以准确查询,但不会使用索引

where a='111',则会使用索引

值为数字类型时,mysql会自动包装为字符串,但如果是字符,会报错,例如:

where a=xxx,这时xxx会被看做字段名,没有此字段,就会报错

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-07-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶五、带or多条件查询

【数据库】MySQL进阶五、or多条件查询 MySQL数据表中带OR的多条件查询 OR关键字可以联合多个条件进行查询。使用OR关键字时: 条件 1) 只要符合这...

5067
来自专栏抠抠空间

MySQL之单表查询

一、单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY fiel...

3147
来自专栏我的小碗汤

mysql支持原生json使用说明

MySQL在5.7.8开始对json原生支持,本文将对MySQL中json类型的用法简单说明,希望对你有用。

1K6
来自专栏Java 源码分析

数据库Exists关键字举例

一.问题描述: 查询所有未选择03号课程的学生的姓名 规定使用存在量词 student表: ? grade表: ? 二.思路: 既然是存在量词那么也就是E...

2966
来自专栏乐沙弥的世界

PL/SQL --> PL/SQL记录

PL/SQL记录有着类似于表的数据结构,是一个或多个字段且拥有数据类型的集合体。定义了PL/SQL记录类型之后,可以定义PL/SQL记录变

743
来自专栏面朝大海春暖花开

mybatis递归,一对多代码示例

由于只有这么两级,可以不用使用递归,直接查询父集,之后foreach查询子集放入对应的list集合。

1691
来自专栏码农分享

数据库批量删除

1953
来自专栏跟着阿笨一起玩NET

sql 在not in 子查询有null值情况下经常出现的陷阱

如果下:Table_A表和Table_B表,要求查询出在Table_A表中不在Table_B表中的记录。

2041
来自专栏IT开发技术与工作效率

MySQL 循环查询树 函数

2095
来自专栏钟绍威的专栏

当子查询碰上NULLUNIONJOIN总结

情景: 现在有如图两个表,boy和girl,对应着Boy和Girl两个bean,有共同字段id、name,另外boy还有个外键grilfriend(指向girl...

1797

扫码关注云+社区

领取腾讯云代金券