我正在使用MySQL在wiki上構建正向索引。我正在與查詢的性能問題,我希望一些幫助優化無論是我的架構或我的查詢在MySQL中優化正向索引
數據庫是1GB左右,它有三個表
- fi_page是800K的wiki頁面表
fi_keyword是70K關鍵字
表CREATE TABLE `fi_keyword` ( `id` int(11) NOT NULL AUTO_INCREMENT, `keyword` varchar(100) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `keyword` (`keyword`) );
fi_titlekeywordlink是一臺6萬個條目鏈接的關鍵字維基頁面
CREATE TABLE `fi_titlekeywordlink` ( `id` int(11) NOT NULL AUTO_INCREMENT, `keyword_id` int(11) NOT NULL, `page_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `fi_titlekeywordlink_a6434082` (`keyword_id`), KEY `fi_titlekeywordlink_c2d3d2bb` (`page_id`), CONSTRAINT `keyword_id_refs_id_67197756` FOREIGN KEY (`keyword_id`) REFERENCES `fi_keyword` (`id`), CONSTRAINT `paper_id_refs_id_705ddf03` FOREIGN KEY (`page_id`) REFERENCES `fi_page` (`id`) );
我翻譯了關於「條款的稱譽」的搜索到一個SQL查詢如
select p.*
from
fi_keyword as k0, fi_titlekeywordlink as l0,
fi_keyword as k1, fi_titlekeywordlink as l1,
fi_keyword as k2, fi_titlekeywordlink as l2,
fi_keyword as k3, fi_titlekeywordlink as l3,
fi_page as p
where
k0.keyword = e and k0.id = l0.keyword_id and p.id = l0.paper_id
and k1.keyword = 'search' and k1.id = l1.keyword_id and p.id = l1.paper_id
and k2.keyword = 'terms' and k2.id = l2.keyword_id and p.id = l2.paper_id
and k3.keyword = 'galore' and k3.id = l3.keyword_id and p.id = l3.paper_id
limit 1,10
然而,這正在圍繞半秒到我的MBP運行。對於如何通過更改模式或查詢來加速這種操作,你有什麼建議嗎?在這種情況下,我不能使用單獨的搜索服務器,正向索引必須在MySQL上運行。謝謝。
什麼表引擎? InnoDB的? –
@MarcusAdams是的,但我很樂意改變 – Duncan