【发布时间】:2013-02-06 10:02:00
【问题描述】:
我有一张超过 12 列的表格。这是用于检索最新 7 条记录的 mysql 查询
SELECT * FROM data WHERE user_id IN(12,10,7,1) HAVING continent IN('Europe','America','Australia') AND NOT MATCH(weather) AGAINST('+"[blues]"' IN BOOLEAN MODE) || continent = 'Asia' AND MATCH(weather) AGAINST('+"[purples]"' IN BOOLEAN MODE) ORDER BY tb_id DESC LIMIT 7
总行数超过5 million,user_id 是一个索引列,tb_id 是PRIMARY KEY。当我在SELECT 前面使用EXPLAIN 时。 MySQL 表示它将从总共 500 万条记录中读取超过 40 万条记录。
那么我应该索引大陆列还是在这种情况下没有帮助?
这是解释结果
id = 1; select_type = SIMPLE; table = data; possible_keys = user_id; key = user_id; ref = NULL; rows = 582; Extra = Using where, Using filesort
【问题讨论】:
-
为什么在 HAVING 子句中有这个?
-
HAVING子句是后来被删除的GROUP BY子句的剩余部分吗?||是布尔值 OR 还是字符串连接?continent是否已编入索引?你忘了发布解释计划。 -
大陆未编入索引。这就是我想知道的。 HAVING 是 GROUP BY 的扩展
标签: mysql select indexing having