你的 「搜索引擎」 的速度主要取決於三個方面:
- 你的SQL查詢
- 你的數據庫設計
- 你的MySQL配置
所以會有沒有「翻轉這個開關,你會得到超級duper性能」。你需要解決所有這些問題。除此之外,還有很多其他可能會影響性能的事情。例如:操作系統,硬盤驅動器,存儲器等等量
讓我們開始與MySQL配置。你應該先嚐試一下mysql的查詢緩存功能。如果您主要讀取操作,則可以提高性能,因爲所有內容都來自緩存並且不需要I/O操作。
這裏閱讀:MySQL Documentation on Query Cache
的另一個重要領域是數據庫設計或數據庫引擎選擇。基本上你有三種選擇:InnoDB,MyIsam和Memory(還有其他的,但我不太瞭解它們)。
據我所知MyISAM和內存只支持表鎖,而不是行鎖定。但是,如果你主要做閱讀操作,這不會影響你。一般來說,它們都比InnoDB更快。如果我是你,我會從記憶開始,因爲一切都在記憶中。但請注意這些含義:您可能需要更多內存,並且如果服務器崩潰,您將丟失未保存的數據。在另一方面
InnoDB的爲您提供了大量的數據的安全性,也可以是非常快,如果你配置是否正確。不幸的是這是一個廣泛的領域。所以我不會涵蓋這一切。首先,將innodb_buffer_pool_size設置爲大約80%的內存。所以如果你有10GB的RAM,你可以將它設置爲8GB。
如果你的服務器有8個以上CPU您可能還需要設置innodb_thread_concurrency參數較大的數字。您應該使用2 * CPU數量。
如果您想了解更多關於MySQL的性能,你應該抓住一杯咖啡,讀此博客:MySQL performance blog
另一個重要的事情可能是一些你列使用索引。但我真的不能告訴它是否會在你的情況還清,因爲我在中國的字典的知識是有限的;)
一般來說你的主鍵字段應該有一個索引。除此之外,您還可以使用索引來查看您經常查詢的字段並且很少更改(索引字段上的每個更改都會使索引無效,因此必須重新編譯 - >性能問題)。
據我所知,它也應該只用於列中包含大量不同數據的情況。如果你有一個只包含「男性」或「女性」的欄目「性別」,你很可能只會將索引樹打破一半。如果你有100個用戶,你最終將得到50行。但是,如果您使用電話號碼的索引(大多數情況下是唯一的),則最終只會有一行更有效。
所以,也許你應該使用列索引ch_smpl。
最後但並非最不重要的你的查詢。我的第一個建議是選擇儘可能少的數據。這意味着避免這樣的疑問:
select * from ...
你的情況:如果你只是想擁有的定義我,你應該使用此查詢:
select definition from dictionary where ch_smpl = '我'
,而不是
select * from dictionary where ch_smpl = '我'
還要避免「Like」 - 帶有searchterm前面百分號的語句,因爲它會停用此列的索引。
例如:
select * from dictionary where ch_smpl like '%我'
您應該只術語後使用百分比符號:
select * from dictionary where ch_smpl like '我%'
最後一個忠告。沒有像我之前說的那樣可以翻轉的特殊開關。你可以做很多事情來獲得更好的表現。嘗試一些事情並測量性能。