先建立具有百萬量的資料表 **:
#建測試表
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;
語句:show profiles;
如果執行上述語句不能檢視,則需要檢視是否開啟:show variables like "%pro%";
開啟:set profiling=1;
關閉:set profiling=0;
主要是為了提高查詢效率。沒有索引,mysql不得不首先以第一條記錄開始,然後讀完整個表直到它找出相關的行。表越大,花費時間越多。
上圖:紅色為建立索引後的查詢時間,綠色為刪除索引後同一條語句的查詢時間。
● 表中該字段中的資料量龐大
● 經常被檢索,經常出現在where子句中的字段
● 經常被dml操作的字段不建議新增索引
語句:create index 索引名 on 表名(欄位名)
alter table 表名 add index 索引名(字段)
示例:create index myindex on t(name);
alter table t add index(name);
注:主鍵,unique 都會預設的新增索引
show index from 表名;
drop index 索引名 on 表名;
alter table 表名 drop index 索引名;
MySQL聚集索引詳解 mysql 索引詳解
直接起飛 1.什麼是索引?索引是幫助mysql高效獲取資料的排好序的資料結構。2.索引的資料結構?為什麼選這種結構?假設我們現在這裡有一張表 以下情況都是innodb儲存引擎 idnumber 如果mysql沒有索引這種結構,那麼我們如果查詢number為51的這行記錄,那麼mysql就要從上往下掃...
MySQL聚集索引詳解 mysql索引詳解
資料結構分,有b tree索引 b tree 雜湊索引 r tree索引等。按資料塊的順序和索引節點的邏輯順序是否一致可以分為聚集索引和非聚集索引。聚集索引由於物理塊連續,在範圍掃瞄的時候可以減少磁頭尋道時間,因而比非聚集索引高效。幾種索引型別的選擇 primary 主鍵索引。unique 唯一索引...
mysql 索引定義 MySQL 索引詳解
普通索引 唯一索引和主索引 1.普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 where column 或排序條件 order by column 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的...