最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mysql索引詳細介紹

 更新時間:2014年07月19日 12:16:03   投稿:junjie  
這篇文章主要介紹了Mysql索引詳細介紹,本文講解了Mysql索引簡介、設(shè)計索引的原則、如何使用索引等內(nèi)容,需要的朋友可以參考下

Mysql索引概述

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

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

還可以創(chuàng)建FULLTEXT索引。該索引可以用于全文搜索。只有MyISAM存儲引擎支持FULLTEXT索引,并且只為CHAR、VARCHAR和TEXT列。索引總是對整個列進行,不支持局部(前綴)索引。也可以為空間列類型創(chuàng)建索引。只有MyISAM存儲引擎支持空間類型。空間索引使用R-樹。默認情況MEMORY(HEAP)存儲引擎使用hash索引,但也支持B-樹索引。

設(shè)計索引的原則

1) 搜索的索引列,不一定是所要選擇的列。

換句話說,最適合索引的列是出現(xiàn)在WHERE 子句中的列,或連接子句中指定的列,而不是出現(xiàn)在SELECT 關(guān)鍵字后的選擇列表中的列。

2) 使用惟一索引。

考慮某列中值的分布。對于惟一值的列,索引的效果最好,而具有多個重復(fù)值的列,其索引效果最差。例如,存放年齡的列具有不同值,很容易區(qū)分 各行。而用來記錄性別的列,只含有“ M”和“F”,則對此列進行索引沒有多大用處(不管搜索哪個值,都會得出大約一半的行)。

3) 使用短索引。

如果對串列進行索引,應(yīng)該指定一個前綴長度,只要有可能就應(yīng)該這樣做。例如,如果有一個CHAR(200) 列,如果在前10 個或20 個字符內(nèi),多數(shù)值是惟一的,那么就不要對整個列進行索引。對前10 個或20 個字符進行索引能夠節(jié)省大量索引空間,也可能會使查詢更快。較小的索引涉及的磁盤I/O 較少,較短的值比較起來更快。更為重要的是,對于較短的鍵值,索引高速緩存中的塊能容納更多的鍵值,因此,MySQL也可以在內(nèi)存中容納更多的值。這增加 了找到行而不用讀取索引中較多塊的可能性。(當然,應(yīng)該利用一些常識。如僅用列值的第一個字符進行索引是不可能有多大好處的,因為這個索引中不會有許多不 同的值。)

4) 利用最左前綴。

在創(chuàng)建一個n 列的索引時,實際是創(chuàng)建了MySQL可利用的n 個索引。多列索引可起幾個索引的作用,因為可利用索引中最左邊的列集來匹配行。這樣的列集稱為最左前綴。(這與索引一個列的前綴不同,索引一個列的前綴是利用該的前n 個字符作為索引值。)

5) 不要過度索引。

不要以為索引“越多越好”,什么東西都用索引是錯的。每個額外的索引都要占用額外的磁盤空間,并降低寫操作的性能,這一點我們前面已經(jīng)介紹 過。在修改表的內(nèi)容時,索引必須進行更新,有時可能需要重構(gòu),因此,索引越多,所花的時間越長。如果有一個索引很少利用或從不使用,那么會不必要地減緩表 的修改速度。此外,MySQL在生成一個執(zhí)行計劃時,要考慮各個索引,這也要費時間。創(chuàng)建多余的索引給查詢優(yōu)化帶來了更多的工作。索引太多,也可能會使 MySQL選擇不到所要使用的最好索引。只保持所需的索引有利于查詢優(yōu)化。如果想給已索引的表增加索引,應(yīng)該考慮所要增加的索引是否是現(xiàn)有多列索引的最左 索引。如果是,則就不要費力去增加這個索引了,因為已經(jīng)有了。

6) 考慮在列上進行的比較類型。

索引可用于“ <”、“ < = ”、“ = ”、“ > =”、“ > ”和BETWEEN 運算。在模式具有一個直接量前綴時,索引也用于LIKE 運算。如果只將某個列用于其他類型的運算時(如STRCMP( )),對其進行索引沒有價值。

btree索引與hash索引

 對于BTREE和HASH索引,當使用=、<=>、IN、IS NULL或者IS NOT NULL操作符時,關(guān)鍵元素與常量值的比較關(guān)系對應(yīng)一個范圍條件。Hash索引還有一些其它特征:它們只用于使用=或<=>操作符的等式比較(但很快)。優(yōu)化器不能使用hash索引來加速ORDER BY操作。(該類索引不能用來按順序搜索下一個條目)。MySQL不能確定在兩個值之間大約有多少行(這被范圍優(yōu)化器用來確定使用哪個索引)。如果你將一個MyISAM表改為hash-索引的MEMORY表,會影響一些查詢。只能使用整個關(guān)鍵字來搜索一行。(用B-樹索引,任何關(guān)鍵字的最左面的前綴可用來找到行)。

對于BTREE索引,當使用>、<、>=、<=、BETWEEN、!=或者<>,或者LIKE 'pattern'(其中 'pattern'不以通配符開始)操作符時,關(guān)鍵元素與常量值的比較關(guān)系對應(yīng)一個范圍條件。“常量值”系指:查詢字符串中的常量、同一聯(lián)接中的const或system表中的列、無關(guān)聯(lián)子查詢的結(jié)果、完全從前面類型的子表達式組成的表達式。

下面是一些WHERE子句中有范圍條件的查詢的例子。

下列范圍查詢適用于 btree索引和hash索引:
   

復(fù)制代碼 代碼如下:
SELECT * FROM t1     WHERE key_col = 1     OR key_col IN (15,18,20);

 下列范圍查詢適用于btree索引
復(fù)制代碼 代碼如下:
SELECT * FROM t1     WHERE key_col > 1     AND key_col < 10;
    SELECT * FROM t1     WHERE key_col LIKE 'ab%'     OR key_col BETWEEN 'bar' AND 'foo';

Mysql如何使用索引

索引用于快速找出在某個列中有一特定值的行。不使用索引,MySQL必須從第1條記錄開始然后讀完整個表直到找出相關(guān)的行。表越大,花費的時間越多。如果表中查詢的列有一個索引,MySQL能快速到達一個位置去搜尋到數(shù)據(jù)文件的中間,沒有必要看所有數(shù)據(jù)。如果一個表有1000行,這比順序讀取至少快100倍。注意如果你需要訪問大部分行,順序讀取要快得多,因為此時我們避免磁盤搜索。

大多數(shù)MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)在B樹中存儲。只是空間列類型的索引使用R-樹,并且MEMORY表還支持hash索引。

關(guān)于什么情況下數(shù)據(jù)庫會使用索引以及什么情況下數(shù)據(jù)庫不會使用索引的詳細解釋請看優(yōu)化篇的相關(guān)章節(jié),這里就不再累述。

相關(guān)文章

  • SQL創(chuàng)建視圖的注意事項及說明

    SQL創(chuàng)建視圖的注意事項及說明

    這篇文章主要介紹了SQL創(chuàng)建視圖的注意事項及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • MySQL之xtrabackup備份恢復(fù)的實現(xiàn)

    MySQL之xtrabackup備份恢復(fù)的實現(xiàn)

    本文主要介紹了MySQL之xtrabackup備份恢復(fù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • mysql 刪除操作(delete+TRUNCATE)

    mysql 刪除操作(delete+TRUNCATE)

    這篇文章主要介紹了mysql 刪除操作,主要包括了delete與TRUNCATE的使用,需要的朋友可以參考下
    2014-11-11
  • MySQL針對Discuz論壇程序的基本優(yōu)化教程

    MySQL針對Discuz論壇程序的基本優(yōu)化教程

    這篇文章主要介紹了MySQL針對Discuz論壇程序的基本優(yōu)化教程,包括在緩存和索引等方面的優(yōu)化方法,需要的朋友可以參考下
    2015-11-11
  • 2017最新版windows安裝mysql教程

    2017最新版windows安裝mysql教程

    這篇文章主要介紹了2017最新版windows安裝mysql教程,本文圖文并茂給大家介紹的非常詳細,需要的朋友可以參考下
    2017-08-08
  • MySQL和PolarDB的相同點及不同點解讀

    MySQL和PolarDB的相同點及不同點解讀

    這篇文章主要介紹了MySQL和PolarDB的相同點及不同點,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • MySQL?8.0?對?limit?的優(yōu)化技巧

    MySQL?8.0?對?limit?的優(yōu)化技巧

    從不同版本的 MySQL 發(fā)展軌跡來看 MySQL 的優(yōu)化器越來越智能 (比如大家期待已久的直方圖特性) ,能更多的減少人為干預(yù),提升執(zhí)行計劃的準確性,這篇文章主要介紹了MySQL?8.0?對?limit?的優(yōu)化,需要的朋友可以參考下
    2022-10-10
  • 安全快速修改Mysql數(shù)據(jù)庫名的5種方法

    安全快速修改Mysql數(shù)據(jù)庫名的5種方法

    mysql中如何重命名數(shù)據(jù)庫?這篇文章主要介紹了安全快速修改Mysql數(shù)據(jù)庫名的5種方法,需要的朋友可以參考下
    2014-04-04
  • MySQL-tpch 測試工具簡要手冊

    MySQL-tpch 測試工具簡要手冊

    tpch是TPC(Transaction Processing Performance Council)組織提供的工具包。用于進行OLAP測試,以評估商業(yè)分析中決策支持系統(tǒng)(DSS)的性能。它包含了一整套面向商業(yè)的ad-hoc查詢和并發(fā)數(shù)據(jù)修改,強調(diào)測試的是數(shù)據(jù)庫、平臺和I/O性能,關(guān)注查詢能力
    2016-05-05
  • MySQL實現(xiàn)自動化部署腳本的詳細教程

    MySQL實現(xiàn)自動化部署腳本的詳細教程

    在當前的DevOps環(huán)境中,自動化部署已成為提升運維效率的核心手段,本教程將手把手教你編寫一個智能化的MySQL部署腳本,感興趣的小伙伴跟著小編一起來看看吧
    2025-03-03

最新評論

湟中县| 长丰县| 固原市| 五家渠市| 定南县| 蒙自县| 定襄县| 仪征市| 静安区| 扶沟县| 蓝山县| 武冈市| 黄石市| 新巴尔虎左旗| 乃东县| 宜兰县| 金堂县| 会同县| 新巴尔虎右旗| 凤阳县| 伊吾县| 牡丹江市| 墨竹工卡县| 柞水县| 沅江市| 克什克腾旗| 革吉县| 南靖县| 潮州市| 清河县| 广汉市| 南投市| 克什克腾旗| 茌平县| 县级市| 上高县| 镇赉县| 丹江口市| 陵川县| 卓资县| 铁岭县|