【发布时间】:2010-10-05 18:42:08
【问题描述】:
我正在尝试加快我目前的查询速度:
SELECT *
FROM `events`
WHERE (field1 = 'some string' or field1 = 'some string')
and is_current = true
GROUP BY event_id
ORDER BY pub_date
这大约需要 30 秒。
field1 是一个 varchar(150)
我目前正在编制索引 field1、is_current、event_id、pub_data 慈善,pub_date,is_current 以及所有字段单独...
我真的不确定应该一起索引哪些字段,当我删除 order by 时,查询速度最高可达 8 秒左右,如果我同时删除 order by 和 group by,则不到 1 秒。 ..
在这种情况下究竟应该对什么进行索引以加快查询速度?
编辑: 我已经对修改后的查询(不再包括分组依据)运行了解释:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE events range is_current,field1_2,field1_3,field1_4,field1 field1_3 153 NULL 204336 Using where; Using filesort
这表明它正在使用键 field1_3,即:field1 & is_current
虽然它没有使用包含这两个字段和 pub_date 的键(用于排序..?)
它也在使用 FILESORT,这似乎是主要问题..
任何想法为什么它使用文件排序,即使 pub_date 字段也被索引(与其他字段一起)?
【问题讨论】:
-
select * 和 group by 语句在单个语句中可能是主要问题。我建议使用完整的字段名而不是 *
标签: mysql database query-optimization