mysql教程(九) 索引詳解
阿新 • • 發佈:2020-12-11
1、準備工作
先建立具有百萬量的資料表 轉自:https://blog.csdn.net/mysqltop/article/details/105230327
#建測試表
drop table if exists t;
CREATE TABLE t (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY comment '自增主鍵',
dept tinyint not null comment '部門id',
name varchar(30) comment '使用者名稱稱' ,
create_time datetime not null comment '註冊時間',
last_login_time datetime comment '最後登入時間'
) comment '測試表';
#手工插入第一條測試資料,後面資料會根據這條資料作為基礎生成
insert into t values(1,1,'user_1', '2018-01-01 00:00:00', '2018-03-01 12:00:00');
#初始化序列變數
set @i=1;
#==================此處拷貝反覆執行,直接符合預想的資料量===================
#執行20次即2的20次方=1048576 條記錄
#執行23次即2的23次方=8388608 條記錄
#執行24次即2的24次方=16777216 條記錄
#......
insert into t(dept, name, create_time, last_login_time)
select left(rand()*10,1) as dept, #隨機生成1~10的整數
concat('user_',@i:=@i+1), #按序列生成不同的name
date_add(create_time,interval +@i*cast(rand()*100 as signed) SECOND), #生成有時間大順序隨機註冊時間
date_add(date_add(create_time,interval +@i*cast(rand()*100 as signed) SECOND), interval + cast(rand()*1000000 as signed) SECOND) #生成有時間大順序的隨機的最後登入時間
from t;
select count(1) from t;
2、在mysql中如何檢視語句執行時間
語句:show profiles;
如果執行上述語句不能檢視,則需要檢視是否開啟:show variables like "%pro%";
開啟:setprofiling=1;
關閉:set profiling=0;
3、為什麼使用索引
主要是為了提高查詢效率。沒有索引,MySQL不得不首先以第一條記錄開始,然後讀完整個表直到它找出相關的行。表越大,花費時間越多。
上圖:紅色為建立索引後的查詢時間,綠色為刪除索引後同一條語句的查詢時間。
4、什麼時候使用索引
● 表中該欄位中的資料量龐大
●經常被檢索,經常出現在where子句中的欄位
● 經常被DML操作的欄位不建議新增索引
5、建立索引
語句:create index 索引名 on 表名(欄位名)
alter table 表名 add index 索引名(欄位)
示例:create index myindex on t(name);
alter table t add index(name);
注:主鍵,unique 都會預設的新增索引
6、檢視索引
show index from 表名;
7、刪除索引
drop index 索引名 ON 表名;
alter table 表名 drop index 索引名;