根據儲存引擎定義每個表的最大索引數和最大索引長度。所有儲存引擎支援每個表至少16個索引,總索引長度至少為 256 位元組。大多數儲存引擎有更高的限制。
在 mysql 5.1 中,對於 myisam 和 innodb 表,字首可以達到 1000 位元組長。請注意前
綴的限制應以位元組為單位進行測量,而 create table 語句中的字首長度解釋為字元數。當
為使用多位元組字符集的列指定字首長度時一定要加以考慮。
還可以建立fulltext 索引。該索引可以用於全文搜尋。只有 myisam 儲存引擎支援
fulltext 索引,並且只為 char 、 varchar 和 text 列。索引總是對整個列進行,不支援區域性(字首) 索引。
也可以為空間列型別建立索引。只有 myisam 儲存引擎支援空間型別
。預設情況 memory(heap) 儲存引擎使用 hash 索引,但也支援 b- 樹索引。
1. 搜尋的索引列,不一定是所要選擇的列。
換句話說,最適合索引的列是出現在 where 子
句中的列,或連線子句中指定的列,而不是出現在 select 關鍵字後的選擇列表中的列 。
2. 使用惟一索引。
考慮某列中值的分布。對於惟一值的列,索引的效果最好,而具有多個
重複值的列,其索引效果最差。例如,存放年齡的列具有不同值,很容易區分各行。而用來記錄性別的列,只含有 「 m 」 和 「 f 」 ,則對此列進行索引沒有多大用處(不管搜尋哪個值,都會得出大約一半的行)。
3. 使用短索引。
如果對串列進行索引,應該指定乙個字首長度,只要有可能就應該這樣做 。
例如,如果有乙個char(200) 列,如果在前 10 個或 20 個字元內,多數值是惟一的,
那麼就不要對整個列進行索引。對前 10 個或 20 個字元進行索引能夠節省大量索引空
間,也可能會使查詢更快。較小的索引涉及的磁碟 i/o 較少,較短的值比較起來更快 。
更為重要的是,對於較短的鍵值,索引快取記憶體中的塊能容納更多的鍵值,因此, mysql
也可以在記憶體中容納更多的值。這增加 了找到行而不用讀取索引中較多塊的可能性。
(當然,應該利用一些常識。如僅用列值的第乙個字元進行索引是不可能有多大好處的,
因為這個索引中不會有許多不 同的值。)
4. 利用最左字首。
在建立 乙個 n 列的索引時,實際是建立了 mysql可利用的 n 個索引。多列索引可起幾個索引的作用,因為可利用索引中最左邊的列集來匹配行。這樣的列集
稱為最左字首。(這與索引乙個列的字首不同,索引乙個列的字首是利用該的前 n個字
符作為索引值。)
5. 不要過度索引。
不要以為索引「 越多越好 」,什麼東西都用索引是錯的。每個額外的索引都要占用額外的磁碟空間,並降低寫操作的效能,這一點我們前面已經介紹 過。在修改表的內容時,索引必須進行更新,有時可能需要重構,因此,索引越多,所花的 時間越長。如果有乙個索引很少利用或從不使用,那麼會不必要地減緩表的修改速度。此外,mysql 在生成乙個執行計畫時,要考慮各個索引,這也要費時間。建立多餘的索引給查詢優化帶來了更多的工作。索引太多,也可能會使 mysql 選擇不到所要使用的最好索引。只保持所需的索引有利於查詢優化。如果想給已索引的表增加索引,應該考慮所要增加的索引是否是現有多列索引的最左索引。如果是,則就不要費力去增加這個索引了,因為已經有了。
注: 1.建立索引的時機:若表中的某欄位出現在select、過濾、排序條件中,為該字段建立索引是值得的。
2.對於like '%***'的模糊查詢,普通的索引是無法滿足的,需要建立全文索引。
3.對於有多個條件的,比如: "...where a=*** and b=yyy","...where a=*** order by b","...where a=*** group by b"。需要使用組合索引。但是組合索引只能在sql語句中滿足"最左字首"的條件下使用。且組合索引有一些***,如索引尺寸可能比資料本身大,因為組合索引的組合條目多。所以在實際應用中,要量身定做,使用慢查詢分析工具分析。
4.開啟索引快取,直接在記憶體中查詢索引,不用再磁碟中。
5.建立索引是有代價的,當update、delete語句執行時,會使得索引更新,將耗掉更多的時間。可以使用mysqlreport報告,了解select、update、delete、insert、replace各語句所佔的百分比。
mysql索引設計 MySQL索引設計原則
一 mysql常用的索引型別 1.1主鍵索引 primary key 1.2唯一索引 unique 1.3普通索引 index 1.4全文索引 1.5組合索引 二 mysql常用的資料結構 2.1b tree 2.2雜湊索引 三 索引的設計原則 3.1選擇唯一性索引 被設為唯一性的值可以設定為索引,...
MySQL索引設計原則
設計原則 低選擇性的列不加索引,如性別 常用的字段放在前面 選擇性高的字段放在前面 需要經常排序的字段,可加到索引中,列順序和最常用的排序一致 對較長的字段資料型別優先考慮字首索引如index url 64 只建立需要的索引,避免冗餘索引,如index a,b index a mysql索引的限制 ...
設計Mysql索引的原則
1.搜尋的索引列,不一定是所要選擇的列。換句話說,最適合索引的列是出現在where 子句中的列,或連線子句中指定的列,而不是出現在select 關鍵字後的選擇列表中的列。2.使用惟一索引。考慮某列中值的分布。對於惟一值的列,索引的效果最好,而具有多個重複值的列,其索引效果最差。例如,存放年齡的列具有...