mysql百萬數據實踐-索引

今天實踐一下mysql數據庫在大數據量的狀況下如何優化,這裏記錄一下過程。
首先是生成百萬級別的數據,直接上sql語句mysql

//建表
CREATE TABLE `person` (
  `id` bigint(20) unsigned NOT NULL,
  `username` varchar(100) NOT NULL,
  `age` tinyint(3) unsigned NOT NULL,
  `sex` tinyint(1) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

//建立生成數據procedure,num表明生成數據量的大小
CREATE PROCEDURE `generate`(IN num INT)  
BEGIN     
    DECLARE char_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    DECLARE username VARCHAR(25) DEFAULT '';    
    DECLARE id int UNSIGNED;  
    DECLARE len int;  
    set id=1;  
    DELETE from person;  
    WHILE id <= num DO  
        set len = FLOOR(1 + RAND()*25);  
        set username = '';  
        WHILE len > 0 DO  
            SET username = CONCAT(username,substring(char_str,FLOOR(1 + RAND()*62),1));  
            SET len = len - 1;  
        END WHILE;   
        INSERT into person VALUES (id,username, FLOOR(RAND()*100), FLOOR(RAND()*2));  
        set id = id + 1;  
    END WHILE;  
END 
//最後執行generate,生成100萬數據
CALL generate(1000000);

圖片描述
接下來就看看查詢耗費時間:sql

//查詢第100萬條數據
select * from person where username=`select`;
//查詢第1條數據
select * from person where username=`65YsbqoyqkbNhQb`;
//查詢第50萬條數據
select * from person where username=`cFzIG8`;

圖片描述圖片描述圖片描述

大概耗費0.16秒,若是是按照主鍵查詢呢?數據庫

//按照主鍵查詢,mysql默認會爲主鍵生成索引
//查詢第100萬條數據
select * from person where id=1000000;
//查詢第1條數據
select * from person where id=1;
//查詢第50萬條數據
select * from person where id=500000;

圖片描述

耗費時間基本不多
那麼爲username建立索引看看效果大數據

create index index_user on person(username(100));

圖片描述

能夠看到,查詢時間和按主鍵進行查詢差很少。說明索引對查詢效果顯著,可是相應的表的體積變大了,未建立索引以前表大概41.7M,建立完後表有59.8M。
下面看看插入的影響有多大。
圖片描述
圖片描述
能夠看到有索引的插入語句耗時0.02秒,沒有的基本忽略。優化

相關文章
相關標籤/搜索