MySQL数据库索引教程(超详细)
索引初步
MySQL索引的建立對(duì)于MySQL的高效運(yùn)行是很重要的,索引可以大大提高M(jìn)ySQL的檢索速度。
拿漢語(yǔ)字典的目錄頁(yè)(索引)打比方,我們可以按拼音、筆畫、偏旁部首等排序的目錄(索引)快速查找到需要的字。
索引分單列索引、唯一索引、組合索引。單列索引,即一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引;唯一索引,即索引列的值必須唯一,但允許有空值。 創(chuàng)建主鍵的時(shí)候回自動(dòng)創(chuàng)建唯一索引。組合索引,即一個(gè)索引包含多個(gè)列。
創(chuàng)建索引時(shí),你需要確保該索引是應(yīng)用在 SQL 查詢語(yǔ)句的條件(一般作為 WHERE 子句的條件)。
實(shí)際上,索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄。
缺點(diǎn)
雖然索引大大提高了查詢速度,同時(shí)卻會(huì)降低更新表的速度,如對(duì)表進(jìn)行INSERT、UPDATE和DELETE。因?yàn)楦卤頃r(shí),MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。
建立索引會(huì)占用磁盤空間的索引文件。
索引結(jié)構(gòu)
實(shí)驗(yàn)準(zhǔn)備(以下實(shí)驗(yàn)都在VMware中進(jìn)行)
1臺(tái)MySQL主機(jī)(5.7)
準(zhǔn)備寫一個(gè)2千萬(wàn)左右的數(shù)據(jù)表(當(dāng)然不是手寫)
創(chuàng)建索引:Navicat 15 for MySQL (圖形化工具)
1、新建一個(gè)數(shù)據(jù)庫(kù)
create database test default character set utf8;2、新建一個(gè)數(shù)據(jù)表
CREATE TABLE testsql (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 '注冊(cè)時(shí)間',last_login_time datetime comment '最后登錄時(shí)間' ) comment '測(cè)試表';3、寫入數(shù)據(jù)
insert into testsql values(1,1,'user_1', '2018-01-01 00:00:00', '2018-03-01 12:00:00');4、賦值
set @i=1;5、做一個(gè)表的倍數(shù)增加(不然幾千萬(wàn)的數(shù)據(jù)寫一年都寫不完)
insert into testsql(dept, name, create_time, last_login_time) select left(rand()*10,1) as dept, #隨機(jī)生成1~10的整數(shù)concat('user_',@i:=@i+1), #按序列生成不同的namedate_add(create_time,interval +@i*cast(rand()*100 as signed) SECOND), #生成有時(shí)間大順序隨機(jī)注冊(cè)時(shí)間date_add(date_add(create_time,interval +@i*cast(rand()*100 as signed) SECOND), interval + cast(rand()*1000000 as signed) SECOND) #生成有時(shí)間大順序的隨機(jī)的最后登錄時(shí)間 from testsql;一直重復(fù)運(yùn)行上面的命令
到后面的速度會(huì)越來(lái)越慢,可能要幾分鐘,這是正常的
6、查看
select count(*) from testsql;這行命令可以查看數(shù)據(jù)表已經(jīng)達(dá)到了多少列
直到數(shù)字出現(xiàn)了幾千萬(wàn)行就可以停止了
(實(shí)幾百萬(wàn)行已經(jīng)可以看到效果了)
查看日志
show variables like "%_buffer%";7、實(shí)驗(yàn)
這個(gè)時(shí)候數(shù)據(jù)表已經(jīng)達(dá)到了幾千萬(wàn)
可以查詢以下幾千萬(wàn)數(shù)據(jù)中的某一行
可以看到搜索速度很慢
8、創(chuàng)建索引
選中數(shù)據(jù)表,單機(jī)右鍵
找到索引
名字可以隨便取
字段我選擇的是name(其他也可以)
類型我選的是NORMAL,方法用的是BTREE
保存,可能要等幾分鐘,這時(shí)候不要亂動(dòng)
9、實(shí)驗(yàn)效果
這個(gè)時(shí)候重新搜索,可以看到延遲已經(jīng)沒有了
select COUNT(*) from t where name='user_500000';以上就是MySQL數(shù)據(jù)庫(kù)索引的教程
總結(jié)
以上是生活随笔為你收集整理的MySQL数据库索引教程(超详细)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 最顶尖的12个IT技能
- 下一篇: 互联网摸鱼日报(2022-10-17)