2013-02-03 78 views
0

我剛剛運行mysql解釋來檢查一個查詢,並驚訝地發現它必須檢查超過250000條記錄來對結果進行排序,但是我有where子句和任何mysql解釋給出的索引我完全一致的,許多新行已添加那麼如何來解決這個問題.mysql表結構mysql的優化說明輸出

tableA is a forum where users can post the content 

    id   userid  created  title 

    1   3   12232   xyz 
    2   etc............... 

我的MySQL查詢的這個

explain SELECT * from tableA where userid='2' order by created desc limit 3 

輸出解釋查詢

id select_type  table type possible_keys key  key_len  ref  rows Extra 
    1  SIMPLE tableA ref  userid userid 4 const 275216 Using where; Using temporary; Using filesort 

我的問題是如何減少到3-4,因爲我有興趣只顯示三個結果,但mysql正在顯示輸出之前搜索275216記錄。因爲275216記錄已經在用戶2在論壇上發佈後創建,但是告訴mysql只查看特定數據的解決方案是什麼,以便它可以從非常小的一組行中搜索結果,我希望最大20-30行mysql應該搜索服務器3行

回答

0

試試這個::

SELECT * from tableA FORCE INDEX (userid) where userid=2 order by created desc limit 3 
+0

試圖輸出功率爲274487的用戶ID indexexonly用戶ID應結合我的用戶ID和一個指數 – raviloves

+0

創建的'userid' int或VARCHAR類型? –

+0

它的int(11).... – raviloves