我有一個查詢是這樣的:在latin1中查詢速度很快,utf8速度慢 - 爲什麼?
SELECT DISTINCT table1.id, {long list of fields} FROM table1
INNER JOIN table2 ON table1.table2_id = table2.id
{... more joins ...}
LEFT JOIN table_last ON table_last.id=some_table.last_id
WHERE (table_last.id IS NULL) AND {...more conditions...}
ORDER BY table1.date_entered desc LIMIT 0,6
在同一個數據庫這個查詢運行時的latin1作爲客戶端字符集運行良好(< 1S運行時),而且是極其緩慢(不能等待它完成後)SET NAMES 'utf8'
。查詢返回70行(當然是限制之前的部分),所以結果集大小不應該成爲問題。我檢查了所有連接中的所有表,並且它們都使用UTF-8作爲它們的字符集(我使用SHOW TABLE CREATE
進行了檢查)。
什麼會導致這種奇怪的行爲?在這種情況下,utf8如此糟糕以至於latin1? 如果相關,則ID字段爲char(36)
,並且聯接具有基於這些字段,整數字段和varchar字段的條件。
P.S.我知道DISTINCT
可能需要時間,但我無法刪除它,無論如何它是70行,它是快速默認(latin1)設置!所以它看起來像查詢外部的東西,但是什麼?
你的表格是什麼排序規則? – 2011-01-29 02:15:34
@Pekka:utf8_general_ci我認爲 – StasM 2011-01-29 02:18:37