日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

如何正確的使用索引 mysql索引怎么實(shí)現(xiàn)( 三 )


方法同上,可以確定a=1,b=5的記錄在{1,1,1}和{1,5,1}的關(guān)聯(lián)范圍內(nèi),搜索過程與a=1的相似 。
查詢b=1的記錄 。
在這種情況下,通過P1頁中的記錄,無法判斷b=1的記錄在那些頁中 。我們只能鎖定索引樹的所有葉節(jié)點(diǎn),遍歷所有記錄,然后進(jìn)行篩選 。此時(shí),索引無效 。
根據(jù)c的值查詢 。
這種情況和查詢b=1一樣,只能掃描所有葉子節(jié)點(diǎn),此時(shí)索引無效 。
按B和c一起查 。
這種索引也不能用,只能掃描所有數(shù)據(jù),此時(shí)索引無效 。
按兩個(gè)字段查詢[a,c]
這只能在索引的A字段中使用 。通過A確定索引范圍,然后加載與A關(guān)聯(lián)的所有記錄,然后過濾C的值..
查詢a=1,b>=0,c=1的記錄 。
這種情況下,只能先確定a=1且b>=0的頁面所在的范圍,然后才能遍歷這個(gè)范圍內(nèi)的所有頁面 。在這個(gè)查詢的過程中,無法確定C的數(shù)據(jù)在哪些頁面 。此時(shí)我們稱C不索引,只有A和B能有效確定索引頁面的范圍 。
類似的還有>,,alter table test 1 modify id int not null主鍵;查詢正常,0行受影響(10.93秒)記錄:0重復(fù):0警告:0mysql >顯示test1的索引;---------------------------------------------------------------------------------------------------------------------------------------------------------// h/]| 1/]| test1 | 0 | PRIMARY | 1
id設(shè)置為主鍵后,會(huì)在ID上建立一個(gè)聚集索引,任意一個(gè)都會(huì)被檢索到 。我們來看看效果:
mysql> select * from test1其中id = 1000000--| id | name | sex | email |--| 1000000 | javacode 1000000 | 2 | javacode1000000@163.com |-集合中的一行(0.00秒)
這個(gè)非???,這個(gè)采用了上面描述的‘唯一記錄檢索’ 。
在和范圍之間搜索
mysql >從test1中選擇count(*),其中id介于100和110之間;-| count(*)|-| 11 |-集合中的1行(0.00秒)
也很快,id上有主鍵索引 。上面介紹的范圍搜索可以快速定位目標(biāo)數(shù)據(jù) 。
但是,如果范圍太大,跨頁太多,速度會(huì)比較慢,如下:
MySQL > select count(*)from test1,其中id介于1和2000000之間;-| count(*)|-| 2000000 |-集合中的一行(1.17秒)
上述id的值跨度太大 。1所在的頁面和200萬所在的頁面之間要讀的頁面很多,所以比較慢 。
所以在使用between和的時(shí)候,區(qū)間跨度不能太大 。
在中檢索
我們?nèi)匀唤?jīng)常使用in來檢索數(shù)據(jù) 。
通常我們做項(xiàng)目的時(shí)候,建議少用表連接 。比如在電子商務(wù)中,如果需要查詢訂單信息和訂單中商品的名稱,可以先查詢訂單表,然后從訂單表中取出商品的id列表,通過in的方式從商品表中檢索商品信息 。因?yàn)樯唐穒d是商品表的主鍵,所以檢索速度還是比較快的 。
按id從400萬條數(shù)據(jù)中檢索100條數(shù)據(jù),看效果:
mysql> select * from test1 a其中a.id in (100000,100001,100002,100003,100004,100005,100006,100007,100008,100009,100010,100011,100012,100013,100014 100071, 100072, 100073, 100074, 100075, 100076, 100077, 100078, 100079, 100080, 100081, 100082, 100083, 100084, 100085, 100086, 100087, 100088, 100089, 100090, 100091, 100092, 100093, 100094, 100095, 100096, 100097, 100098, 100099);---| id | name | sex | email |--100000 | javacode 100000 | 2 | javacode100000@163.com || 100001 | javacode 100001 | 1 | javacode100001@163.com || 100002 | javacode 100002 | 2 | javacode100002@163.com |.......| 100099 | javacode 100099 | 1 | javacode100099@163.com |-集合中的100行(0.00秒)
用時(shí)不到1毫秒,還是挺快的 。
這相當(dāng)于搜索多個(gè)唯一的記錄,然后合并這些記錄 。
有多個(gè)索引時(shí)如何查詢?
讓我們分別對(duì)姓名和性別字段建立索引 。
mysql >在test1(name)上創(chuàng)建索引idx1查詢正常,0行受影響(13.50秒)記錄:0重復(fù):0警告:0mysql >在test1(sex)上創(chuàng)建索引idx2查詢正常,0行受影響(6.77秒)記錄:0重復(fù)項(xiàng):0警告:0

推薦閱讀