我正試圖提高現有MySQL數據庫的性能。MySQL索引 - 如何提高性能?
它是關於餐館數據庫,有兩個相關的表:
還有一個供網站的所有實體表,每個實體都有一個唯一的ID, 一個實體可以是幾乎任何東西,它可以是一個餐廳,用戶和其他許多東西。 有幾種實體類型,而餐廳的實體類型是「對象」。
我還要說這個數據庫的結構已經存在了很多 所以我不想做大的修改,例如我不打算刪除所有實體的表 。 (數據庫本身沒有數據,但是PHP引擎是這樣構建的,所以它很難對結構進行大的修改)。
也有一個表只能爲對象,有幾種類型在數據庫 對象,但餐館專門將是 搜索了很多,因爲這是該網站的主題, 餐館有幾個領域:國家,城市,名稱,流派。 在同一個城市和國家不能有兩個同名的餐廳, (例如,可以有兩個餐廳同名,但在同一個國家的不同城市 或兩個同名的餐廳但在不同的國家)
所以從這個事實,我想我應該做一個獨特的三列索引的國家,城市和名稱列。
另外我想說的是,URL也是以www.domain.com/Country/City/Restuarant-Name的形式構建的,所以國家城市名稱的組合應該快速獲取,這種類型的查詢會發生很多。
但也會有許多其他類型的查詢,如:搜索名稱爲 餐廳(使用LIKE查詢,因爲搜索的名稱可以是全名的一部分 ))城市或某個國家。 搜索某個國家和城市中某個流派的所有餐館。 和幾乎所有可能的組合。
也許是最常用的查詢將是:(a)爲餐館名稱搜索某市 和國家(這將是一樣的,當一個URL被輸入,但將使用 LIKE使用的查詢),(B )在某個城市和國家搜索某種類型的餐館。 和最後(C)在搜索餐館的名字在全球範圍(在整個數據庫,而不指定城市和國家)
這個表(對象表),目前有PRIMARY KEY是對象的ID, 該ID還使用了很多,將最好的做法是以下?:
- 做一個三列的唯一指標了國家,城市的,名稱
- 再拍(不是唯一的)索引超出名字(所以我上面寫的類型c的查詢將會執行得很快)
- 可能會創建某種子表,其中只包含 表中的餐館,因此將查詢此子表。
我真的很感激任何幫助,因爲我(因爲如果我決定 做出大的改變我可能會單獨從對象 其餘的餐館開始,這是不那麼重要)我一直試圖決定這個很長一段時間。
ps在對象表中的一些對象將不會有任何類型或任何國家或城市,所以他們將保持NULL,我知道NULL值是允許在一個唯一的鍵,但它會對 有影響表演?
感謝名單了很多的人誰願意閱讀本長的問題:)
http://stackoverflow.com/questions/6098616/dos-and-donts-for-indexes/ –
@Denis感謝您的鏈接。爲了表現,索引是關鍵。潘打算。 – Wiseguy