请教一个 MySQL 查询问题

2017-08-29 09:53:48 +08:00
 silenceeeee

当一个查询中包含较多的”碰撞性很高的列”的时候,如何优化呢?

比如有如下 SQL:

SELECT * FROM tab WHERE status=1 AND is_onsale=1 AND type=1 AND is_recommand

类似这样的查询,假设这里的查询条件的可能值都只有少数几个, 如 status 的值只能为 1,2,3。is_onsale 的值只能为 1 或 -1。

4518 次点击
所在节点    MySQL
27 条回复
stelpen
2017-08-30 07:50:26 +08:00
@finull 如果这几个值分布均匀索引也没啥效果,如果分布不均匀,查询的值是分布较少的那一部分,索引才有明显的效果
stelpen
2017-08-30 07:51:09 +08:00
@wintercoder 说反了吧
viakiba
2017-08-30 08:47:36 +08:00
explain 一下
caijihui11
2017-08-30 08:58:54 +08:00
不用调整了,这样就是最好的 sql 了 。
DRcoding
2017-08-30 09:06:28 +08:00
少年郎,你还是买本权威指南看看吧,你这单表查询优化无非是对查询项加索引。对于你说的“碰撞性很高的列”,你没有发现如果你第二次重复执行一条相同的查询语句,一般情况下速度会快很多嘛。
silenceeeee
2017-08-30 17:44:01 +08:00
@340244120 会的 这两个索引的最左前缀是不一样的。
340244120
2017-08-30 18:25:19 +08:00
@silenceeeee 谢谢 不过这也略不智能啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/386526

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX