我在我的數據庫,其中有超過百萬記錄的字典,這個簡單的選擇MySQL查詢優化性能
select * from Word where languageId = 'en' order by rand() limit 1
隨機選擇一個字。
問題是,這個請求持續3-4秒,這是非常長的,因爲我不得不重複多次。
有沒有辦法實現同樣的事情,但更快?
編輯 - 表模式
wordId - integer, auto increment
languageId - varchar (FK), values like cs, en, de, ...
word - varchar, word itself
數據結構例子
wordId languageId word
--------------------------
1 cs abatyše
...
100000 cs zip
100001 en aardvark
...
etc
SQL
CREATE TABLE Language (
languageId VARCHAR(20) NOT NULL ,
name VARCHAR(255) NULL ,
PRIMARY KEY(languageId));
CREATE TABLE Word (
wordId INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
languageId VARCHAR(20) NOT NULL ,
word VARCHAR(255) NULL ,
PRIMARY KEY(wordId) ,
INDEX Word_FK_Language(languageId),
FOREIGN KEY(languageId)
REFERENCES Language(languageId)
ON DELETE NO ACTION
ON UPDATE NO ACTION);
您是否有記錄ID列? – Cheery 2012-02-09 21:30:10
@Cheery是的,我有 – user219882 2012-02-09 21:32:27
您能告訴我更多關於您想要做什麼嗎?也許你不需要執行單個查詢,或者你的解決方案可以被優化。 – Cheery 2012-02-09 21:45:15