| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> mysql >> 由淺入深講解MySQL數據庫索引的選擇性
 

由淺入深講解MySQL數據庫索引的選擇性

2008-06-01 03:22:20  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  在MySQL中,對于索引的使用並是一直都采用正確的決定。

  簡單表的示例:

  CREATE TABLE `r2` (

  ID` int(11) DEFAULT NULL,

  ID1` int(11) DEFAULT NULL,

  CNAME` varchar(32) DEFAULT NULL,

  KEY `ID1` (`ID1`)

  ) ENGINE=MyISAM DEFAULT CHARSET=latin1

  SELECT COUNT(*) FROM r2;

  250001 (V1)

  SELECT COUNT(*) FROM r2 WHERE ID1=1;

  83036 (V2)

  (execution time = 110 ms)

  (ID1=1)條件查詢索引的選擇性是 V2/V1 = 0.3321 或 33.21%

  一般來說(例如書 「SQL Tuning「),如果選擇性超過 20% 那麽全表掃描比使用索引性能更優。

  我知道Oracle一直是在選擇性超過25%時會選擇全表掃描。

  而MySQL呢:

  mysql> EXPLAIN SELECT COUNT(SUBNAME) FROM r2 WHERE ID1=1;

  +----+-------------+-------+------+---------------+-----

  | id | select_type | TABLE | type | possible_keys | KEY | key_len | ref | rows | Extra |

  +----+-------------+-------+------+---------------+-----

  | 1 | SIMPLE | t2 | ref | ID1 | ID1 | 5 | const | 81371 | USING WHERE |

  +----+-------------+-------+------+---------------+-----

  這就是MySQL將會使用索引來完成這個查詢。

  讓我們來對比索引查詢和全表掃描的執行時間:

  SELECT COUNT(SUBNAME) FROM t2 WHERE ID1=1 - 410 ms

  SELECT COUNT(SUBNAME) FROM t2 IGNORE INDEX (ID1) WHERE ID1=1 - 200 ms

  如你所看到全表掃描要快2倍。

  參考更特殊的例子:選擇性 ~95%:

  SELECT cnt2 / cnt1 FROM (SELECT count(*) cnt1 FROM r2) d1, (SELECT count(*) cnt2 FROM r2 WHERE ID1=1) d2;

  0.9492 = 94.92%;

  說明MySQL將會用索引來完成查詢。

  執行時間:

  SELECT COUNT(SUBNAME) FROM t2 WHERE ID1=1 - 1200 ms

  SELECT COUNT(SUBNAME) FROM t2 IGNORE INDEX (ID1) WHERE ID1=1 - 260 ms

  這次全表掃描要快4.6倍。

  爲什麽MySQL選擇索引訪問查詢?

  MySQL沒有計算索引的選擇性,只是預測邏輯IO操作的數量,並且我們的例子中間的邏輯IO數量,索引訪問要少于全表掃描。

  最後我們得出結論,對于索引要小心使用,因爲它們並不能幫助所有的查詢。
 
 
 
上一篇《MySQL性能調整之my.cnf文件的配置方法》
下一篇《講解MySQL索引的概念及數據庫索引的應用》
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

 
 
 
在MySQL中,對于索引的使用並是一直都采用正確的決定。 簡單表的示例: CREATE TABLE `r2` ( ID` int(11) DEFAULT NULL, ID1` int(11) DEFAULT NULL, CNAME` varchar(32) DEFAULT NULL, KEY `ID1` (`ID1`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 SELECT COUNT(*) FROM r2; 250001 (V1) SELECT COUNT(*) FROM r2 WHERE ID1=1; 83036 (V2) (execution time = 110 ms) (ID1=1)條件查詢索引的選擇性是 V2/V1 = 0.3321 或 33.21% 一般來說(例如書 「SQL Tuning「),如果選擇性超過 20% 那麽全表掃描比使用索引性能更優。 我知道Oracle一直是在選擇性超過25%時會選擇全表掃描。 而MySQL呢: mysql> EXPLAIN SELECT COUNT(SUBNAME) FROM r2 WHERE ID1=1; +----+-------------+-------+------+---------------+----- | id | select_type | TABLE | type | possible_keys | KEY | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+----- | 1 | SIMPLE | t2 | ref | ID1 | ID1 | 5 | const | 81371 | USING WHERE | +----+-------------+-------+------+---------------+----- 這就是MySQL將會使用索引來完成這個查詢。 讓我們來對比索引查詢和全表掃描的執行時間: SELECT COUNT(SUBNAME) FROM t2 WHERE ID1=1 - 410 ms SELECT COUNT(SUBNAME) FROM t2 IGNORE INDEX (ID1) WHERE ID1=1 - 200 ms 如你所看到全表掃描要快2倍。 參考更特殊的例子:選擇性 ~95%: SELECT cnt2 / cnt1 FROM (SELECT count(*) cnt1 FROM r2) d1, (SELECT count(*) cnt2 FROM r2 WHERE ID1=1) d2; 0.9492 = 94.92%; 說明MySQL將會用索引來完成查詢。 執行時間: SELECT COUNT(SUBNAME) FROM t2 WHERE ID1=1 - 1200 ms SELECT COUNT(SUBNAME) FROM t2 IGNORE INDEX (ID1) WHERE ID1=1 - 260 ms 這次全表掃描要快4.6倍。 爲什麽MySQL選擇索引訪問查詢? MySQL沒有計算索引的選擇性,只是預測邏輯IO操作的數量,並且我們的例子中間的邏輯IO數量,索引訪問要少于全表掃描。 最後我們得出結論,對于索引要小心使用,因爲它們並不能幫助所有的查詢。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
夏末午後的美麗女生
天生麗質_唯美動人
清新素雅的靓麗女生
完美絕倫_秀色可餐
芙蓉古鎮(一)
就是不一樣的街燈&#;
百態
荷一組(三張)
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有