我知道我需要一個主鍵集,並設置任何唯一的鍵作爲唯一鍵,但是什麼是INDEX,我該如何使用它們?在mysql中使用INDEXES最大的好處是什麼?
有什麼好處?優點&缺點?我注意到我可以使用它們,我應該什麼時候使用它?
我知道我需要一個主鍵集,並設置任何唯一的鍵作爲唯一鍵,但是什麼是INDEX,我該如何使用它們?在mysql中使用INDEXES最大的好處是什麼?
有什麼好處?優點&缺點?我注意到我可以使用它們,我應該什麼時候使用它?
你不要有有一個主鍵。索引(任何類型的)用於加快查詢速度,至少在InnoDB引擎中實施外鍵約束。無論您使用唯一索引還是普通索引(非唯一索引),都取決於您是否希望在鍵中使用重複值。
這是一個總的數據庫概念,你可以使用外部資源來了解它,就像http://beginner-sql-tutorial.com/sql-index.htm或http://en.wikipedia.org/wiki/Index_(database)
索引可以讓MySQL來查找數據更快。您可以在WHERE
條款中使用的列上使用它們。例如,如果您有一個名爲score
的列,並且想要查找與score > 5
之間的所有內容,默認情況下,這意味着MySQL需要掃描整個表以查找這些分數。但是,如果您使用BTREE索引,那麼找到那些符合該條件的索引會更快地發生。
指數有一個價格:磁盤和內存空間。如果這是一張非常大的桌子,你的指數會變得相當大。
優點:
更快地查找結果。這是關於減少磁盤IO的數量的。您可以使用索引結構(如B-Trees或Hash Indexes)更快地獲取數據,而不是掃描整個表以獲取結果,從而減少磁盤IO的數量(頁面提取)。
缺點:
寫入速度較慢(可能)。您不僅需要將數據寫入表格,還必須寫入索引。這可能會導致系統重新構造索引結構(哈希索引,B樹等),這在計算上可能非常昂貴。
自然會佔用更多的磁盤空間。您正在存儲更多數據。
想想這樣:在書中有索引的最大好處是什麼?這是一回事。你有一本稍大的書,但你可以快速查找的東西。在列上創建索引時,您希望能夠在where子句中引用它以快速查找它。
思考索引的最簡單方法是思考字典。它有單詞,它有與這些單詞相對應的定義。字典有一個關於「單詞」的索引,因爲當你閱讀一本字典時,你想快速查找一個單詞,然後得到它的定義。一本字典通常只包含一個索引 - 一個索引。
數據庫是類似的。當你在數據庫中有一堆數據時,你會有一些你想要得到的方法。假設您有一個用戶表,並且您經常通過FirstName列查找用戶。由於這是您經常在應用程序中執行的操作,因此您應該考慮在此列上使用索引。這將在數據庫中創建一個結構體,如果您願意的話,在該列中進行排序,以便通過名字查找某些內容就像在字典中查找單詞一樣。如果你沒有這個索引,你可能需要查看所有的行,然後再確定哪些具有特定的FirstName。通過添加一個索引,你已經做得很快。
那麼爲什麼不把所有列的索引,並使他們都快?像所有事情一樣,這是一種折衷。每次向表格中插入一行用戶時,數據庫都需要執行它的魔法並對索引列上的所有內容進行排序。這可能是昂貴的。
簡短回答:
索引加快SELECT
's並減緩INSERT
's。
通常最好有索引,因爲它們加速select
多於它們減慢insert
。如果你的索引字段的update
一個
上UPDATE
如果索引字段是WHERE
條款和慢下來的東西中使用的索引可以加快速度方式。
你怎麼知道什麼時候使用索引
添加EXPLAIN
在SELECT
語句的前面。
像這樣:
EXPLAIN SELECT * FROM table1
WHERE unindexfield1 > unindexedfield2
ORDER BY unindexedfield3
會告訴你多少工作,MySQL將不得不在每個索引字段做。
使用該信息可以決定是否值得添加索引。
解釋也可以告訴你,如果它是更好地下降,指數
EXPLAIN SELECT * FROM table1
WHERE indexedfield1 > indexedfield2
ORDER BY indexedfield3
如果很少選擇行或MySQL決定忽略指數(它是不時)那麼你也可以放棄索引,因爲它是放慢你的insert
s,但不加快你的select
的。
然後它也可能是你的選擇語句不夠聰明。
(對不起,複雜的答案,我試圖保持簡單,但失敗了)。
我應該如何使用這個查詢?:EXPLAIN SELECT * FROM table1 WHERE indexedfield1> indexedfield2 ORDER BY indexedfield3;我的意思是我知道要在indexedfield1上放什麼,但那些indexedfield2和indexedfield3怎麼樣? – Viscocent 2014-04-30 07:21:36
參考文獻:[Wikipedia文章](http://en.wikipedia.org/wiki/Index_(數據庫)) – 2011-04-17 22:33:59
降價吃了你的括號 – 2011-04-17 22:35:21