<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    2.索引作用

    在索引列上,除了上面提到的有序查找之外,數(shù)據(jù)庫利用各種各樣的快速定位技術(shù),能夠大大提高查詢效率。特別是當(dāng)數(shù)據(jù)量非常大,查詢涉及多個(gè)表時(shí),使用索引往往能使查詢速度加快成千上萬倍。

    例如,有3個(gè)未索引的表t1t2t3,分別只包含列c1c2c3,每個(gè)表分別含有1000行數(shù)據(jù)組成,指為11000的數(shù)值,查找對應(yīng)值相等行的查詢?nèi)缦滤尽?/span>

     

    SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3

    此查詢結(jié)果應(yīng)該為1000行,每行包含3個(gè)相等的值。在無索引的情況下處理此查詢,必須尋找3個(gè)表所有的組合,以便得出與WHERE子句相配的那些行。而可能的組合數(shù)目為1000×1000×1000(十億),顯然查詢將會(huì)非常慢。

    如果對每個(gè)表進(jìn)行索引,就能極大地加速查詢進(jìn)程。利用索引的查詢處理如下。

    1)從表t1中選擇第一行,查看此行所包含的數(shù)據(jù)。

    2使用表t2上的索引,直接定位t2中與t1的值匹配的行。類似,利用表t3上的索引,直接定位t3中與來自t1的值匹配的行。

    3)掃描表t1的下一行并重復(fù)前面的過程,直到遍歷t1中所有的行。

    在此情形下,仍然對表t1執(zhí)行了一個(gè)完全掃描,但能夠在表t2t3上進(jìn)行索引查找直接取出這些表中的行,比未用索引時(shí)要快一百萬倍。

    利用索引,MySQL加速了WHERE子句滿足條件行的搜索,而在多表連接查詢時(shí),在執(zhí)行連接時(shí)加快了與其他表中的行匹配的速度。

    13.4.2 創(chuàng)建索引

    在執(zhí)行CREATE TABLE語句時(shí)可以創(chuàng)建索引,也可以單獨(dú)用CREATE INDEXALTER TABLE來為表增加索引。

    1ALTER TABLE

    ALTER TABLE用來創(chuàng)建普通索引、UNIQUE索引或PRIMARY KEY索引。

     

    ALTER TABLE table_name ADD INDEX index_name (column_list)

    ALTER TABLE table_name ADD UNIQUE (column_list)

    ALTER TABLE table_name ADD PRIMARY KEY (column_list)

     

    其中table_name是要增加索引的表名,column_list指出對哪些列進(jìn)行索引,多列時(shí)各列之間用逗號(hào)分隔。索引名index_name可選,缺省時(shí),MySQL將根據(jù)第一個(gè)索引列賦一個(gè)名稱。另外,ALTER TABLE允許在單個(gè)語句中更改多個(gè)表,因此可以在同時(shí)創(chuàng)建多個(gè)索引。

    2CREATE INDEX

    CREATE INDEX可對表增加普通索引或UNIQUE索引。

     

    CREATE INDEX index_name ON table_name (column_list)

    CREATE UNIQUE INDEX index_name ON table_name (column_list)

     

    table_nameindex_namecolumn_list具有與ALTER TABLE語句中相同的含義,索引名不可選。另外,不能用CREATE INDEX語句創(chuàng)建PRIMARY KEY索引。

    3.索引類型

    在創(chuàng)建索引時(shí),可以規(guī)定索引能否包含重復(fù)值。如果不包含,則索引應(yīng)該創(chuàng)建為PRIMARY KEYUNIQUE索引。對于單列惟一性索引,這保證單列不包含重復(fù)的值。對于多列惟一性索引,保證多個(gè)值的組合不重復(fù)。

    PRIMARY KEY索引和UNIQUE索引非常類似。事實(shí)上,PRIMARY KEY索引僅是一個(gè)具有名稱PRIMARYUNIQUE索引。這表示一個(gè)表只能包含一個(gè)PRIMARY KEY,因?yàn)橐粋€(gè)表中不可能具有兩個(gè)同名的索引。

    下面的SQL語句對students表在sid上添加PRIMARY KEY索引。

     

    ALTER TABLE students ADD PRIMARY KEY (sid)

     

    13.4.3 刪除索引

    可利用ALTER TABLEDROP INDEX語句來刪除索引。類似于CREATE INDEX語句,DROP INDEX可以在ALTER TABLE內(nèi)部作為一條語句處理,語法如下。

     

    DROP INDEX index_name ON talbe_name

    ALTER TABLE table_name DROP INDEX index_name

    ALTER TABLE table_name DROP PRIMARY KEY

     

    其中,前兩條語句是等價(jià)的,刪除掉table_name中的索引index_name

    3條語句只在刪除PRIMARY KEY索引時(shí)使用,因?yàn)橐粋€(gè)表只可能有一個(gè)PRIMARY KEY索引,因此不需要指定索引名。如果沒有創(chuàng)建PRIMARY KEY索引,但表具有一個(gè)或多個(gè)UNIQUE索引,則MySQL將刪除第一個(gè)UNIQUE索引。

    如果從表中刪除了某列,則索引會(huì)受到影響。對于多列組合的索引,如果刪除其中的某列,則該列也會(huì)從索引中刪除。如果刪除組成索引的所有列,則整個(gè)索引將被刪除

    posted on 2012-09-04 23:00 abin 閱讀(1297) 評論(0)  編輯  收藏 所屬分類: DatabaseIndex
    主站蜘蛛池模板: 皇色在线免费视频| 久久99精品免费一区二区| a级毛片免费在线观看| 日本中文字幕免费高清视频| 免费黄色福利视频| 午夜一区二区免费视频| 亚洲?V乱码久久精品蜜桃| 亚洲成a人片在线观看无码专区| 亚洲福利视频网址| 欧洲精品码一区二区三区免费看 | 亚洲伦理中文字幕| 一个人看的免费高清视频日本| 久视频精品免费观看99| 亚洲狠狠爱综合影院婷婷| 亚洲国产美女视频| baoyu116.永久免费视频| 亚洲精品无码久久久久去q | 91亚洲性爱在线视频| 无遮挡国产高潮视频免费观看 | 国产自产拍精品视频免费看| 亚洲av永久无码精品国产精品 | 亚洲日韩国产AV无码无码精品| a毛片在线免费观看| 亚洲va在线va天堂va888www| 成人在线免费视频| 国产v亚洲v天堂无码网站| 亚洲视频在线免费播放| 亚洲第一街区偷拍街拍| 91精品免费久久久久久久久| 中文字幕亚洲码在线| 2021国产精品成人免费视频| 亚洲国产综合91精品麻豆| rh男男车车的车车免费网站| 国产最新凸凹视频免费| 国产无遮挡又黄又爽免费网站| 亚洲精品综合久久| 2021精品国产品免费观看| 美女羞羞免费视频网站| 暖暖日本免费在线视频| 亚洲精品无码国产片| 亚洲精品无码不卡在线播放HE|