青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
一、什么是索引?

  索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存。如果沒有索引,執行查詢時MySQL必須從第一個記錄開始掃描整 個表的所有記錄,直至找到符合要求的記錄。表里面的記錄數量越多,這個操作的代價就越高。如果作為搜索條件的列上已經創建了索引,MySQL無需掃描任何 記錄即可迅速得到目標記錄所在的位置。如果表有1000個記錄,通過索引查找記錄至少要比順序掃描記錄快100倍。

  假設我們創建了一個名為people的表:

CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );

  然后,我們完全隨機把1000個不同name值插入到people表。下圖顯示了people表所在數據文件的一小部分:


點擊查看原圖

  可以看到,在數據文件中name列沒有任何明確的次序。如果我們創建了name列的索引,MySQL將在索引中排序name列:

點擊查看原圖

  對于索引中的每一項,MySQL在內部為它保存一個數據文件中實際記錄所在位置的“指針”。因此,如果我們要查找name等于“Mike”記錄的 peopleid(SQL命令為“SELECT peopleid FROM people WHERE name=\'Mike\';”),MySQL能夠在name的索引中查找“Mike”值,然后直接轉到數據文件中相應的行,準確地返回該行的 peopleid(999)。在這個過程中,MySQL只需處理一個行就可以返回結果。如果沒有“name”列的索引,MySQL要掃描數據文件中的所有 記錄,即1000個記錄!顯然,需要MySQL處理的記錄數量越少,則它完成任務的速度就越快。

  二、索引的類型

  MySQL提供多種索引類型供選擇:
  • 普通索引

    這是最基本的索引類型,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式創建:

    • 創建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
    • 修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
    • 創建表的時候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

  • 唯一性索引

    這種索引和前面的“普通索引”基本相同,但有一個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用以下幾種方式創建:

    • 創建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
    • 修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
    • 創建表的時候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );

  • 主鍵

    主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”。如果你曾經用過AUTO_INCREMENT類型的列,你可能已經熟悉主鍵之類的概念了。主鍵一般在創建表的時候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我們也可以通過修改表的方式加入主鍵,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每個表只能有一個主鍵。
     
  • 全文索引

    MySQL從3.23.23版開始支持全文索引和全文檢索。在MySQL中,全文索引的索引類型為FULLTEXT。全文索引可以在VARCHAR或者 TEXT類型的列上創建。它可以通過CREATE TABLE命令創建,也可以通過ALTER TABLE或CREATE INDEX命令創建。對于大規模的數據集,通過ALTER TABLE(或者CREATE INDEX)命令創建全文索引要比把記錄插入帶有全文索引的空表更快。本文下面的討論不再涉及全文索引,要了解更多信息,請參見MySQL documentation。
  三、單列索引與多列索引

  索引可以是單列索引,也可以是多列索引。下面我們通過具體的例子來說明這兩種索引的區別。假設有這樣一個people表:

ALTER TABLE people ADD INDEX fname_lname_age (firstname,lastname,age);

  由于索引文件以B-樹格式保存,MySQL能夠立即轉到合適的firstname,然后再轉到合適的lastname,最后轉到合適的age。在沒有掃描數據文件任何一個記錄的情況下,MySQL就正確地找出了搜索的目標記錄!

  那么,如果在firstname、lastname、age這三個列上分別創建單列索引,效果是否和創建一個firstname、lastname、 age的多列索引一樣呢?答案是否定的,兩者完全不同。當我們執行查詢的時候,MySQL只能使用一個索引。如果你有三個單列的索引,MySQL會試圖選 擇一個限制最嚴格的索引。但是,即使是限制最嚴格的單列索引,它的限制能力也肯定遠遠低于firstname、lastname、age這三個列上的多列 索引。

  四、最左前綴

  多列索引還有另外一個優點,它通過稱為最左前綴(Leftmost Prefixing)的概念體現出來。繼續考慮前面的例子,現在我們有一個firstname、lastname、age列上的多列索引,我們稱這個索引 為fname_lname_age。當搜索條件是以下各種列的組合時,MySQL將使用fname_lname_age索引:
  • firstname,lastname,age
  • firstname,lastname
  • firstname
  從另一方面理解,它相當于我們創建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)這些列組合上的索引。下面這些查詢都能夠使用這個fname_lname_age索引:
 
table type possible_keys key key_len ref rows Extra
people ref fname_lname_age fname_lname_age 102 const,const,const 1 Where used

  下面我們就來看看這個EXPLAIN分析結果的含義。
  • table:這是表的名字。

  • type:連接操作的類型。下面是MySQL文檔關于ref連接類型的說明:

    “對于每一種與另一個表中記錄的組合,MySQL將從當前的表讀取所有帶有匹配索引值的記錄。如果連接操作只使用鍵的最左前綴,或者如果鍵不是 UNIQUE或PRIMARY KEY類型(換句話說,如果連接操作不能根據鍵值選擇出唯一行),則MySQL使用ref連接類型。如果連接操作所用的鍵只匹配少量的記錄,則ref是一 種好的連接類型。”

    在本例中,由于索引不是UNIQUE類型,ref是我們能夠得到的最好連接類型。

    如果EXPLAIN顯示連接類型是“ALL”,而且你并不想從表里面選擇出大多數記錄,那么MySQL的操作效率將非常低,因為它要掃描整個表。你可以加入更多的索引來解決這個問題。預知更多信息,請參見MySQL的手冊說明。

  • possible_keys

    可能可以利用的索引的名字。這里的索引名字是創建索引時指定的索引昵稱;如果索引沒有昵稱,則默認顯示的是索引中第一個列的名字(在本例中,它是“firstname”)。默認索引名字的含義往往不是很明顯。

  • Key

    它顯示了MySQL實際使用的索引的名字。如果它為空(或NULL),則MySQL不使用索引。

  • key_len

    索引中被使用部分的長度,以字節計。在本例中,key_len是102,其中firstname占50字節,lastname占50字節,age占2字節。如果MySQL只使用索引中的firstname部分,則key_len將是50。

  • ref

    它顯示的是列的名字(或單詞“const”),MySQL將根據這些列來選擇行。在本例中,MySQL根據三個常量選擇行。

  • rows

    MySQL所認為的它在找到正確的結果之前必須掃描的記錄數。顯然,這里最理想的數字就是1。

  • Extra

    這里可能出現許多不同的選項,其中大多數將對查詢產生負面影響。在本例中,MySQL只是提醒我們它將用WHERE子句限制搜索結果集。
  七、索引的缺點

  到目前為止,我們討論的都是索引的優點。事實上,索引也是有缺點的。

  首先,索引要占用磁盤空間。通常情況下,這個問題不是很突出。但是,如果你創建每一種可能列組合的索引,索引文件體積的增長速度將遠遠超過數據文件。如果你有一個很大的表,索引文件的大小可能達到操作系統允許的最大文件限制。

  第二,對于需要寫入數據的操作,比如DELETE、UPDATE以及INSERT操作,索引會降低它們的速度。這是因為MySQL不僅要把改動數據寫入數據文件,而且它還要把這些改動寫入索引文件。

  【結束語】

  在大型數據庫中,索引是提高速度的一個關鍵因素。不管表的結構是多么簡單,一次500000行的表掃描操作無論如何不會快。如果你的網站上也有這種大規模的表,那么你確實應該花些時間去分析可以采用哪些索引,并考慮是否可以改寫查詢以優化應用。要了解更多信息,請參見MySQL manual。另外注意,本文假定你所使用的MySQL是3.23版,部分查詢不能在3.22版MySQL上執行。

轉自:
http://space.itpub.net/47598/viewspace-329730
posted on 2009-11-24 17:00 chatler 閱讀(256) 評論(0)  編輯 收藏 引用 所屬分類: Database
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            91久久中文字幕| 欧美午夜在线视频| 亚洲国产日韩精品| 亚洲尤物在线| 欧美日韩二区三区| 你懂的视频欧美| 亚洲国产精品成人精品| 午夜国产不卡在线观看视频| 久久高清免费观看| 欧美特黄视频| 中文日韩在线视频| 亚洲精品四区| 亚洲人成毛片在线播放| 亚洲电影在线| 亚洲影院色无极综合| 亚洲国产精品va在线看黑人| 久久超碰97人人做人人爱| 久久久99久久精品女同性| 欧美在线视频播放| 亚洲国产精品久久久久婷婷884| 久久夜色精品国产| 久久蜜桃香蕉精品一区二区三区| 欧美一区二区视频在线观看2020 | 欧美激情五月| 亚洲一区二区免费| 免费观看在线综合色| 国产精品美女www爽爽爽视频| 亚洲精品乱码久久久久久蜜桃91 | 亚洲电影视频在线| 久久久噜噜噜久久人人看| 亚洲视频综合| 国产精品羞羞答答| 久久久91精品国产| 欧美伊人影院| 1000部国产精品成人观看| 久久久www成人免费毛片麻豆| 午夜视频一区二区| 亚洲国产精品专区久久| 亚洲国产精品第一区二区| 亚洲激情女人| 国产亚洲激情在线| 99pao成人国产永久免费视频| 国产色综合久久| 一区二区三区视频在线| 在线日韩视频| 久久久久91| 亚洲视频自拍偷拍| 久久国产手机看片| 在线中文字幕一区| 久久在线视频| 久久精品一区二区三区不卡牛牛| 女女同性精品视频| 欧美成人资源| 亚洲综合电影| 欧美日韩国产精品一区二区亚洲| 欧美一区二区视频在线观看2020| 老司机午夜精品| 久久国产欧美精品| 国产精品一区久久| 亚洲校园激情| 亚洲一区免费视频| 欧美日韩一区二区三区在线视频| 久久久久久香蕉网| 国产一级揄自揄精品视频| 亚洲一区制服诱惑| 亚洲欧美视频在线观看视频| 欧美性一区二区| 亚洲欧美国产精品专区久久| 性欧美精品高清| 国产精品亚洲综合久久| 亚洲午夜激情网页| 久久精品日产第一区二区| 国产三级欧美三级日产三级99| 性xx色xx综合久久久xx| 久久久精品tv| 亚洲高清资源综合久久精品| 老司机精品久久| 亚洲精品一区二区三区婷婷月| 一本大道久久a久久精二百| 欧美日韩在线三区| 亚洲欧美日韩天堂| 欧美黄色日本| 香蕉久久一区二区不卡无毒影院| 国产欧美日韩综合一区在线观看 | 亚洲激情在线观看| 欧美日韩免费一区二区三区| 亚洲人成网站在线观看播放| 免费不卡在线观看av| 亚洲自啪免费| 日韩一级片网址| 亚洲成人在线网站| 99天天综合性| 久久精品国产亚洲精品| 亚洲精品1区| 国产精品自拍小视频| 欧美高清成人| 欧美一区二区免费| 99re6热只有精品免费观看| 久久在线免费| 久久激情视频| 久久国产黑丝| 久久久99精品免费观看不卡| 一区二区三区视频在线| 91久久嫩草影院一区二区| 红桃视频国产精品| 伊人精品成人久久综合软件| 国产亚洲欧美另类一区二区三区| 国产精品久久久久久久7电影| 欧美另类一区二区三区| 欧美激情一区二区三区| 欧美成人在线影院| 欧美精品1区2区| 欧美涩涩视频| 国产伦精品一区二区三区在线观看 | 国产色综合久久| 狠狠狠色丁香婷婷综合久久五月 | 欧美超级免费视 在线| 欧美自拍偷拍午夜视频| 麻豆国产精品一区二区三区| 久久国产婷婷国产香蕉| 久久国产精品99国产精| 欧美第十八页| 国产欧美日韩亚州综合| 激情五月综合色婷婷一区二区| 伊人久久久大香线蕉综合直播| 日韩亚洲欧美综合| 久久精品免视看| 日韩亚洲在线| 欧美成人三级在线| 国产欧美日韩亚洲一区二区三区| 亚洲国产精品热久久| 欧美日本高清一区| 亚洲综合成人婷婷小说| 另类国产ts人妖高潮视频| 亚洲乱亚洲高清| 国产精品美女久久久久久2018| 欧美一区激情| 久久综合一区二区| 一区二区三区欧美日韩| 麻豆精品在线视频| 可以看av的网站久久看| 一区二区亚洲| 亚洲国产成人久久综合| 久久丁香综合五月国产三级网站| 欧美午夜视频网站| 亚洲美女啪啪| 亚洲日本免费| 欧美午夜在线视频| 欧美资源在线观看| 亚洲一区自拍| 国产揄拍国内精品对白 | 欧美视频观看一区| 亚洲最新视频在线| 亚洲精品一品区二品区三品区| 欧美日韩一区二区三区| 午夜久久久久久久久久一区二区| 欧美在线亚洲综合一区| 亚洲欧美国产日韩中文字幕| 欧美日韩免费观看一区| 欧美在线播放一区| 欧美日本在线| 欧美福利在线观看| 国产区二精品视| 亚洲欧洲日产国产网站| 国产精品视频福利| 欧美v日韩v国产v| 国产精品视屏| 亚洲清纯自拍| 怡红院av一区二区三区| 亚洲欧美日韩国产综合精品二区| 亚洲电影自拍| 欧美一区二区三区在线观看| 日韩亚洲精品电影| 久久精品亚洲精品国产欧美kt∨| 日韩视频精品在线观看| 久久人人九九| 久久精品视频va| 国产日韩欧美一区二区三区在线观看| 亚洲福利视频一区| 国产亚洲视频在线| 亚洲欧美日本在线| 久久av一区二区三区亚洲| 国产日本欧美在线观看| 久久精品盗摄| 亚洲欧洲在线视频| 亚洲精品国产拍免费91在线| 欧美精品日本| 久久精品一本| 一区二区三区精品视频在线观看| 午夜精品福利视频| 亚洲精品一区中文| 一区国产精品| 国产精品有限公司| 欧美亚洲成人免费| 亚洲三级影片| 亚洲一区二区三区久久| 国产精品h在线观看| 亚洲欧美另类在线观看| 久久久青草婷婷精品综合日韩 | 亚洲国产欧美在线人成|