1. 程式人生 > 實用技巧 >mysql教程(九) 索引詳解

mysql教程(九) 索引詳解

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 索引名;