相关疑难解决方法(0)

MySQL`FORCE INDEX`用例?

几乎在任何地方,我FORCE INDEX都非常沮丧地使用它,我完全理解并知道原因 - MySQL有更大的机会知道哪些索引比(普通)开发人员更好.

但是,最近我发现了一个案例,它FORCE INDEX在几百次的范围内改进了我的执行时间:

  • JOIN 在4张桌子上
  • 第一张表有大约500 000条记录
  • INNER JOINed表中的2个有超过1百万的记录
  • 第一个表有一个名为的字段published_date,varchar以YMD格式存储(无法更改为datetime)
  • 需要published_date最多5 000条记录的范围
  • 第一个表上的一些其他GROUP BYORDER BY子句在不同的字段上,而不是published_date此查询所需的

虽然我以多种方式重写了查询,但我的执行时间不到130秒(最高超过700秒).使用FORCE INDEXpublished_date,执行时间降至5秒以下.

我花了几天时间才想起臭名昭着的FORCE INDEX选择.

问题:

  • 您找到的其他用例是什么FORCE INDEX
  • 考虑使用时,您是否有一些最佳实践FORCE INDEX

编辑 - Obsevations: 我也在这里创建了这篇博文.你提供的所有答案也会出现在那里 - 有学分和你想要的所有东西.

编辑2

I applied the suggestions I received in your comments (ANALYZE TABLE and OPTIMIZE …

mysql

24
推荐指数
2
解决办法
1万
查看次数

向MySQL查询添加限制子句会大大减慢它的速度

我正在尝试解决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)

mysql performance limit

4
推荐指数
1
解决办法
3862
查看次数

标签 统计

mysql ×2

limit ×1

performance ×1