关于SQL优化的小知识

栏目: 数据库 · 发布时间: 7年前

内容简介:不命中命中不命中

不命中

select account from user where id not in (1,2,3);
复制代码

命中

select account from user where id not in (4,5,6);
复制代码

前置模糊查询不命中索引

不命中

select account from user where name like '%lufei'
复制代码

命中

select account from user where name like 'lu%fei%'
复制代码

建议可以考虑使用 Lucene 等全文索引 工具 来代替频繁的模糊查询。

数据区分不明显不建议索引

对非唯一的字段,例如“性别”这种大量重复的重复值的字段,增加索引也没有什么意义。可以采用唯一账号等字段。

越小越简单的数据类型建议索引

越小越简单的数据类型通常在磁盘、内存中占用少,处理起来更快,例如整型数据比字符处理开销小,因为字符串的比较更复杂,处理非常耗时。

尽量避免null

索引字段应该制定列为NOT NULL 。含有空值得列很难进行查询优化,因为他们使得索引、索引的统计信息以及比较运算增加复杂,应该用0或者特殊值、空字符代替。

在字段上进行计算不能命中索引

索引列不能参与计算,尽量保持列“干净”。比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能命中索引。 不命中

select account from user where FROM_UNIXTIME(create_time) = CURDATE();
复制代码

命中

select account from user where create_time = FROM_UNIXTIME(CURDATE());
复制代码

表表连接索引

表与表连接用于多表联合查询的约束条件的字段应当建立索引,并且进行 join 的字段两表的字段类型要相同,不然也不会命中索引。

字段类型强制转换不命中索引

不命中

select account from user where phone = 1341111111
复制代码

命中

select account from user where phone = '1341111111'
复制代码

如果知道是一条记录,使用limit

select account from user where phone = '1341111111' limit 1
复制代码

可以提高效率,让数据库停止游标移动。

最左匹配

最左前缀匹配原则。MySQL会一直向右匹配直到遇到范围查询(>,<,BETWEEN,LIKE)就停止匹配。 如有索引(a, b, c, d),查询条件a = 1 and b = 2 and c > 3 and d = 4,则会在每个节点依次命中a、b、c,而无法命中d。(很简单:索引命中只能是相等的情况,不能是范围匹配)


以上所述就是小编给大家介绍的《关于SQL优化的小知识》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

世界是平的

世界是平的

[美] 托马斯·弗里德曼 / 何帆、肖莹莹、郝正非 / 湖南科学技术出版社 / 2006-11 / 56.00元

当学者们讨论世界这20年发展的历史,并把目光聚集在2000年到2004年3月这一段时间时,他们将说些什么?9·11恐怖袭击还是伊拉克战争?或者,他们将讨论:科技的汇集与传播使得印度、中国和许多发展中国家成为世界商品和服务产品供给链上的一员,从而为世界大的发展中国家中的中产阶级带来了大量的财富,使这两个国家在全球化浪潮中占据更有利的位置?随着世界变得平坦,我们必须以更快的速度前进,才能在竞争中赢得胜......一起来看看 《世界是平的》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具