2013-07-26 105 views
0

我在醫院有一張病人表,所以隨着時間的推移,這張表可能會包含數萬行。爲每個患者分配一個醫院唯一的ID號(BIGINT)作爲PRIMARY KEY,其餘的列是VARCHAR或CHAR,以及一個DATE列。據我所知,PRIMARY KEYS會自動編入索引,因此患者ID的搜索是最優的(?)。MySQL - 將索引加快我的搜索查詢?

患者可以通過一個單一領域或該ID,姓名,地址的組合來搜索,出生日期等。我可以簡單地優化我的搜索通過創建對這些領域中的每一個指數?如果在這些INDEX字段的組合上執行搜索,這種優化是否也可以工作,如

SELECT * FROM patients WHERE first_name="John" AND address="blah blah blah"; 

???

而且,我相信MySQL使用搜索,也許是二進制搜索自己的內部算法,並且用戶無法選擇或實現自己的?

回答

0

從MySQL文檔http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html這是一個非常有趣的閱讀反正:

假定你發出下列SELECT語句:

的mysql> SELECT * FROM tbl_name WHERE COL1 = val1和COL2 =值2;

如果col1和col2上存在多列索引,適當的行 可以直接取出。如果 col1和col2上存在單獨的單列索引,優化器將嘗試使用索引合併 優化(見

+0

會不會有,爲的所有組合創建單一和多列索引的缺點例如,我可以在first_name上有一個索引,在地址上有一個單獨的索引,在first_name和address上有另一個索引,等等...... – Amoeba

+0

索引佔用空間,爲什麼你不試試看如果你喜歡的話,你也可以刪除索引,如果他們沒有幫助的話。 –