国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

Mysql索引詳細介紹

2024-07-24 12:47:02
字體:
來源:轉載
供稿:網友

Mysql索引概述

所有MySQL列類型可以被索引。對相關列使用索引是提高SELECT操作性能的最佳途徑。根據存儲引擎定義每個表的最大索引數和最大索引長度。所有存儲引擎支持每個表至少16個索引,總索引長度至少為256字節。大多數存儲引擎有更高的限制。

在MySQL 5.1中,對于MyISAM和InnoDB表,前綴可以達到1000字節長。請注意前綴的限制應以字節為單位進行測量,而CREATE TABLE語句中的前綴長度解釋為字符數。當為使用多字節字符集的列指定前綴長度時一定要加以考慮。

還可以創建FULLTEXT索引。該索引可以用于全文搜索。只有MyISAM存儲引擎支持FULLTEXT索引,并且只為CHAR、VARCHAR和TEXT列。索引總是對整個列進行,不支持局部(前綴)索引。也可以為空間列類型創建索引。只有MyISAM存儲引擎支持空間類型。空間索引使用R-樹。默認情況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選擇不到所要使用的最好索引。只保持所需的索引有利于查詢優化。如果想給已索引的表增加索引,應該考慮所要增加的索引是否是現有多列索引的最左 索引。如果是,則就不要費力去增加這個索引了,因為已經有了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赤水市| 江北区| 北海市| 无棣县| 徐闻县| 高淳县| 宁海县| 深水埗区| 宜昌市| 清水县| 手游| 曲周县| 哈尔滨市| 扶沟县| 东山县| 扬州市| 同江市| 梨树县| 策勒县| 邹城市| 津南区| 永泰县| 类乌齐县| 祁门县| 安乡县| 吉安县| 三原县| 灵台县| 和硕县| 辽宁省| 偃师市| 墨竹工卡县| 衡东县| 日照市| 桐城市| 施秉县| 怀仁县| 章丘市| 云安县| 百色市| 绥阳县|