2013-06-25 77 views
0

我有一個非常簡單和直接的SQL查詢,需要100多秒才能完成。表中有大約10,000行數據被搜索。我能做些什麼來加速這個查詢?如何優化這個簡單的SQL查詢?

該查詢搜索是表結構..

id (int 10) 
forumId (varchar 255) 
username (varchar 255) 
email (varchar 255) 
timestamp (int 10) 

例如查詢是..

SELECT * FROM users WHERE forumId = 'minecraft' AND username = 'test' 

它正在超過100秒

+0

您的表上的任何索引?你能展示一個執行計劃嗎? –

+0

'forumId'可能是'ENUM'。您還可以將一個索引添加到'forumId'和'username'。 –

+2

對於只有10K條記錄,我會懷疑有一些鎖定或發生了什麼 - 表掃描不應該花費那麼長時間。除非你的行包含大BLOB或什麼? – Blorgbeard

回答

7

添加化合物指數,

ALTER TABLE ADD INDEX(forumId, username) 

也將您的字符串長度降低到約75 :)

+0

+1我討厭處理多個字符串過濾器,複合索引是目前最好的方法。 – KaeL

+2

'+ 1'爲索引,但我不認爲降低字符串長度應該會提高性能(儘管我不是mySql專家) –

+2

@MikeChristensen:[「Filesort使用固定長度的行存儲格式類似於由MEMORY存儲引擎使用,VARCHAR等可變長度類型使用固定長度存儲。「](http://dev.mysql.com/doc/refman/5.7/zh/order-by-optimization.html )如果OP對這個表進行排序,並且MySQL選擇使用filesort,則MySQL將在磁盤上構建一個每個這些列都需要255個字符的結構。這可能會導致很多磁盤I/O。 –