几乎在任何地方,我FORCE INDEX都非常沮丧地使用它,我完全理解并知道原因 - MySQL有更大的机会知道哪些索引比(普通)开发人员更好.
但是,最近我发现了一个案例,它FORCE INDEX在几百次的范围内改进了我的执行时间:
JOIN 在4张桌子上INNER JOINed表中的2个有超过1百万的记录published_date,varchar以YMD格式存储(无法更改为datetime)published_date最多5 000条记录的范围GROUP BY和ORDER BY子句在不同的字段上,而不是published_date此查询所需的虽然我以多种方式重写了查询,但我的执行时间不到130秒(最高超过700秒).使用FORCE INDEX后published_date,执行时间降至5秒以下.
我花了几天时间才想起臭名昭着的FORCE INDEX选择.
问题:
FORCE INDEX?FORCE INDEX?编辑 - Obsevations: 我也在这里创建了这篇博文.你提供的所有答案也会出现在那里 - 有学分和你想要的所有东西.
编辑2
I applied the suggestions I received in your comments (ANALYZE TABLE and OPTIMIZE …
我正在尝试解决MySQL上的性能问题,因此我想创建一个较小版本的表来使用.当我向查询添加LIMIT子句时,它从大约2秒(对于完整插入)到天文(42分钟).
mysql> select pr.player_id, max(pr.insert_date) as insert_date from player_record pr
inner join date_curr dc on pr.player_id = dc.player_id where pr.insert_date < '2012-05-15'
group by pr.player_id;
+------------+-------------+
| 1002395119 | 2012-05-14 |
...
| 1002395157 | 2012-05-14 |
| 1002395187 | 2012-05-14 |
| 1002395475 | 2012-05-14 |
+------------+-------------+
105776 rows in set (2.19 sec)
mysql> select pr.player_id, max(pr.insert_date) as insert_date from player_record pr
inner join date_curr dc on pr.player_id = dc.player_id where pr.insert_date < '2012-05-15'
group by pr.player_id limit 1; …Run Code Online (Sandbox Code Playgroud)