我正在執行一個查詢,該命令將命令BOOLEAN字段(TINYINT(1))上的結果。它被索引。布爾字段上的命令比PK上的命令慢得多
SELECT * FROM `main_catalog` ORDER BY `main_catalog`.`is_tv_on_itunes` ASC LIMIT 1
這需要1.61秒的時間來運行。如果我做同樣的查詢沒有ORDER BY
,需要花費的一小部分時間:
SELECT * FROM `main_catalog` LIMIT 1
這需要4.1ms完成。爲什麼在布爾型字段上排序比在PK上排序要花費更多時間?
表格有多少條記錄?即使您使用的是「LIMIT 1」,MySQL也必須在返回1條記錄之前對記錄進行排序。另外,你可以檢查'EXPLAIN EXTENDED SELECT * FROM main_catalog ORDER BY main_catalog.is_tv_on_itunes ASC LIMIT 1',這會告訴你索引是否被使用。 – Jaylen 2014-10-28 00:23:11
要檢查的另一件事是sort_buffer_size的值。 '如果此值設置得太低,則顯示全局變量'sort_buffer_size',如果sort_buffer_size的值低於默認值,則會影響默認值的順序爲2097144嘗試設置會話值並查看您是否看到改進'SET SESSION sort_buffer_size = 5242880' – Jaylen 2014-10-28 00:34:19
@MIKE - 值爲:'sort_buffer_size \t 262144'。該表大約有1M行和312MB。 – David542 2014-10-28 00:39:47