隨筆 - 154  文章 - 60  trackbacks - 0
          <2008年2月>
          272829303112
          3456789
          10111213141516
          17181920212223
          2425262728291
          2345678

          聲明:

          該blog是為了收集資料,認(rèn)識(shí)朋友,學(xué)習(xí)、提高技術(shù),所以本blog的內(nèi)容除非聲明,否則一律為轉(zhuǎn)載!!

          感謝那些公開(kāi)自己技術(shù)成果的高人們!!!

          支持開(kāi)源,尊重他人的勞動(dòng)!!

          常用鏈接

          留言簿(3)

          隨筆分類(lèi)(148)

          隨筆檔案(143)

          收藏夾(2)

          其他

          學(xué)習(xí)(技術(shù))

          觀察思考(非技術(shù))

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          MYSQL使用索引的方法
          作者:vicki 2006-12-05 16:46:51
          標(biāo)簽:
           
          如何建立索引
           
          · 索引通常被用于提高WHERE條件的數(shù)據(jù)行匹配或者執(zhí)行聯(lián)結(jié)操作時(shí)匹配其它表的數(shù)據(jù)行的搜索速度。所以我們選擇索引的列也通常選擇出現(xiàn)在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。
          · 選擇索引時(shí),需要考慮數(shù)據(jù)列的基數(shù)。所謂基數(shù),是指數(shù)據(jù)列所包含的不同的數(shù)據(jù)的個(gè)數(shù)。如果基數(shù)相對(duì)于數(shù)據(jù)表行數(shù)較高的話,索引的效果比較好。換句話說(shuō),就是指數(shù)據(jù)列的不同的值越多,索引效果越好。如果一個(gè)數(shù)據(jù)列只包含:0或者1兩個(gè)值的話,索引的用處就不大。如果值出現(xiàn)的幾率幾乎相等,那么無(wú)論搜索哪個(gè)值都可能得到一半的數(shù)據(jù)行。在這些情況下,最好根本不要使用索引。
          · 索引值較短的值,所選擇的數(shù)據(jù)類(lèi)型也盡可能的要小一些。譬如:如果TEXT能滿足需求的話,我們就不需要用MEDIUTEXT。
          · 如果建立聯(lián)合索引的話,譬如對(duì):t1,t2,t3建立聯(lián)合索引的話,同時(shí)也是對(duì)t1和t1,t2建立了索引。但是如果單獨(dú)指定t2、t3、t1t3、t2t3的值的話,都會(huì)用不到索引。
           
          sql語(yǔ)句中如何避免沒(méi)有使用索引的情況
           
          首先先了解一下mysql優(yōu)化器的工作原理:MySQL查詢優(yōu)化器最主要的目標(biāo)是盡可能地使用索引,并且使用最嚴(yán)格的索引來(lái)消除盡可能多的數(shù)據(jù)行。所以當(dāng)我們提交查詢語(yǔ)句時(shí),如果優(yōu)化器排除不符合條件的數(shù)據(jù)的速度越快,那么查詢的結(jié)果也會(huì)越快。
          ·盡量比較數(shù)據(jù)類(lèi)型相同的數(shù)據(jù)列。例如,INT與BIGINT是不同的。CHAR(10)被認(rèn)為是CHAR(10)或VARCHAR(10),但是與CHAR(12)或VARCHAR(12)不同。
          ·盡量不要在where子句中對(duì)索引列使用表達(dá)式或者函數(shù)。如果你在索引列使用函數(shù)調(diào)用或者更復(fù)雜的算術(shù)表達(dá)式,MySQL就不會(huì)使用索引,因?yàn)樗仨氂?jì)算出每個(gè)數(shù)據(jù)行的表達(dá)式值。
             WHERE mycol < 4 / 2 使用索引
             WHERE mycol * 2 < 4 沒(méi)有使用索引
          · 在使用LIKE時(shí),盡量不要在開(kāi)頭使用通配符。
              WHERE col_name LIKE ’%string%’
              WHERE col_name LIKE ’abc%’
          · 不要使用類(lèi)型轉(zhuǎn)換。如果某個(gè)索引列是int型,而在查詢時(shí),賦值為字符型,將使用不了索引。
              SELECT * FROM mytbl WHERE num_col = 1;使用索引
              SELECT * FROM mytbl WHERE num_col = ‘1’;沒(méi)有使用索引
          ·在SELECT語(yǔ)句中可以使用STRAIGHT_JOIN關(guān)鍵字來(lái)重載優(yōu)化器的選擇。
              SELECT STRAIGHT_JOIN ... FROM t1, t2, t3 ... ;
              SELECT ... FROM t1 STRAIGHT_JOIN t2 STRAIGHT_JOIN t3 ... ;


          http://blog.sina.com.cn/s/reader_46599af7010006rv.html
          posted on 2008-02-01 16:08 lk 閱讀(3087) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): DB
          主站蜘蛛池模板: 云阳县| 加查县| 盐城市| 海林市| 鸡泽县| 莱阳市| 株洲市| 靖西县| 绵阳市| 临夏市| 河池市| 宁都县| 阳原县| 华宁县| 沁阳市| 和林格尔县| 宾阳县| 河源市| 阳原县| 青岛市| 苗栗市| 渑池县| 平昌县| 漠河县| 肇州县| 丘北县| 墨玉县| 延庆县| 鄂托克前旗| 洛扎县| 内江市| 和平区| 萨嘎县| 双柏县| 河池市| 上栗县| 隆德县| 南宁市| 临西县| 双柏县| 杭锦后旗|