上周的mysql官網上送出了一個bug,原因為在我們的一個分頁sql中出現了全表掃描的情況,這對于我們來說是不可接受的:
+—-+————-+————+——–+———————+———+———+——+——–+—————-+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra
|+—-+————-+————+——–+———————+———+———+——+——–+—————-+
| 1 | primary | <derived2> | all | null | null | null | null | 9 | |
| 1 | primary | t | eq_ref | primary | primary | 8 | g.id | 1 | |
| 2 | derived | g | all | ind_group_type_time | null | null | null | 652469 | using filesort
|+—-+————-+————+——–+———————+———+———+——+——–+——–
3 rows in set (0.54 sec)
可以看到在内查詢中即使加入了force index 也沒有上查詢走上索引,而是走了全表掃,如果将其單獨拿出來執行,而不做關聯查詢的話,是可以用上覆寫索引:
+—-+————-+——-+——-+———————+———————+——–
| id | select_type | table | type | possible_keys | key | key_len | ref | rows ||
| 1 | simple | g | range | ind_group_type_time | ind_group_type_time | 9 | null | 326235 | using where; using index; using filesort |
+—-+————-+——-+——-+———————+———————+——-
在和官網的valeriy kravchuk多次溝通後,最終認為這是一個bug;最後解決的辦法是調整索引,來避免排序的,這樣就能夠使用覆寫索引索引:
是以大家對這種類型的分頁語句一定多加注意,由于排序導緻全表掃描的問題;