MySql系列一:建索引

來源:互聯網
上載者:User

標籤:重要   auto   簡單   單列   效能   rem   prim   bubuko   區分   

本文主要目的是測試單列是否應該建立索引,並以查詢時間和掃描行數作為參考依據。mysql版本5.5.20

一:建表

CREATE TABLE `record` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `openid` varchar(63) NOT NULL,  `tagId` int(11) DEFAULT NULL,  PRIMARY KEY (`id`),  KEY `idx_openid` (`openid`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

二:插入資料

向record表中匯入20萬測試資料

 

 

 

三:測試openid列二值平均分布情況

(3.1)更新資料

update record set openid = ‘1‘ where id>0 and id<=100000;update record set openid = ‘2‘ where id>100000 and id<=200000;

(3.2)openid列不使用索引

(3.2.1)查詢所有列

 

(3.2.2)  查詢tagId列

 

註:rows:顯示MYSQL估算執行查詢的行數,不是精確值,簡單且重要,數值越大越不好

分析:不使用索引時,大致掃描193958行,查詢所有列查詢時間為0.230s,查詢非索引單列為0.181s。所以,盡量不要查詢不需要的列。

 

(3.3)openid列使用建表時的索引

 

分析:openid列使用索引後,大致掃描101132行,查詢時間0.342s,相對於不使用索引,雖然掃描的行數變少了,但是查詢時間大致增加了三分之一。因為先要在BTree樹中尋找,然後再回表查詢,導致查詢時間不減反增了。所以平時我們如果在性別列等二值列建立索引,是完全沒有效果的。

 

四:建索引總結

(1)經測試,在上述20萬資料情況下,如果openid列4值平均分布的情況下,使用索引(全列查詢0.175s)和不使用索引(全列查詢0.178s)的時間大致相當。但索引還有額外記憶體等消耗,如果索引對查詢效能改善不大,在該列建立索引作用不大。

(2)建索引的情況下,根據索引查詢出的資料越多,查詢時間越長。在資料分布不均,某些索引查詢條件下,查出的資料比較多時需要注意。

(3)在區分性較高的列上建索引是比較好的選擇。

 

MySql系列一:建索引

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.