此查詢對MyISAM表到永遠:的MySQL:查詢沒有結果
SELECT * FROM table
WHERE link_id = 1 and counted = 1
現在,如果我不通過計算,它變得真快。當我通過計算,它只是需要永遠。這是一張大桌子,但我沒有看到它卡住的原因,而不是隻顯示一張空桌子。
任何想法?
此查詢對MyISAM表到永遠:的MySQL:查詢沒有結果
SELECT * FROM table
WHERE link_id = 1 and counted = 1
現在,如果我不通過計算,它變得真快。當我通過計算,它只是需要永遠。這是一張大桌子,但我沒有看到它卡住的原因,而不是隻顯示一張空桌子。
任何想法?
這是因爲它必須通過每行都過濾counted=1
。您是否在link_id
上設置了索引?如果是這樣,你可以設置一個爲counted
但是無論如何不需要遍歷多行? (沒有後查詢操作) – 2011-09-01 19:45:24
運行這個來看看你的表是否有合適的索引。也許算沒有索引?
EXPLAIN SELECT * FROM table WHERE link_id = 1 and counted = 1
這就是我得到的:id:1,select type:SIMPLE,table:table,\t type:ref,possible_keys:IX_2,IX_1,IX_3,key:IX_1,key_len:4 ,ref:const,rows:33333,extra:using where – luqita
我的猜測是,你只是缺少一個索引。試試這個:
SHOW INDEXES FROM <your table name>
你看到column_name
場counted
?
如果沒有,那麼你可能想:
CREATE INDEX <nifty index name> ON <your table name> (counted);
我接下來會看EXPLAIN
(其彌解釋here)。 (我只建議解釋第二,因爲我的經驗是,大多數的時間問題是一個簡單的缺失索引如果查詢很慢。)
上的索引(link_id,計)將使該查詢快。
你有什麼專欄索引? –
'table'上存在哪些索引(如果有)? –
請發佈您的表的創建語句。 – Poodlehat