(重點) MySQL(入門篇17) 索引的介紹;索引的使用(在100萬條數據下的查詢效果)

一、索引的介紹:

1.索引的分類

索引 介紹
1.主鍵索引 (primary key) 一般建表的時候添加,非空 ,比如 id,不能取名.
2.唯一索引(unique key) 表中的值必須唯一不能重複,比如賬戶名稱,
3.默認索引(key ) 沒有限制,可空,可重複
4.全文索引(fulltext) 配合match against 操作而不是 where,先放數據在全文索引速度快些
5.組合索引 就是在多個字段上創建索引,但是隻有查詢第一個字段(最左)的時候索引纔會生效

2. 設置索引的幾種方法

1.在創建表的時候設置比如

create table if not exists `student`(
`name` varchar(100) not null comment "學生名稱",
`id` int not null auto_increment comment"學生學號自增auto_increment",
`sex` char not null default 'M' comment "性別默認男",
primary key (`id`)
)engine = innodb default charset utf8;

效果:

在這裏插入圖片描述


2.修改表的時候添加索引。(transactionbank是數據庫名稱(添加索引的表之前要加數據庫),特殊索引name是給索引取的名字,)

ALTER TABLE `transactionbank`.`student` ADD UNIQUE INDEX `特殊索引name` (`name`); 

效果:
在這裏插入圖片描述

3.直接添加索引。默認索引(index)

CREATE  INDEX `默認索引name` ON student(`sex`)

二、索引的使用(在100萬條數據下的查詢效果)

1. 使用函數給SQL插入100萬條數據.

1.建表

CREATE TABLE `student` (
  `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `name` varchar(20) NOT NULL COMMENT '學員名稱(學員01)',
  `phone` varchar(11) DEFAULT NULL COMMENT '學員的電話',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7759910 DEFAULT CHARSET=utf8

2.創建一個插入數據的函數
(1)如果有函數先刪除

-- 如果有函數先刪除,注意這裏沒有 () 括號
DROP FUNCTION IF EXISTS createDate

(2)創建函數(注意要先設置結束符號)

DELIMITER $$ -- 因爲函數裏面存在;結束符號,更改結束符號爲 $$ 
 CREATE FUNCTION createDate()
 RETURNS INT  -- returns 不是 return
 BEGIN
	DECLARE numberOfDate INT DEFAULT 1000000; -- 數據量 100萬
	DECLARE i  INT DEFAULT 0;                  -- 遍歷 i 爲 0
	WHILE i < numberOfDate DO                  -- 如果條件成立就執行
		INSERT INTO `student`(`name`,`phone`)
		VALUES
		(CONCAT("學員",i), -- 學員名稱
		CONCAT("18",RAND()*(999999999-100000000)+100000000) -- 學員電話
		);
		SET i = i + 1;
	END WHILE ; -- 結束循環 end while 不是 while end 
	RETURN i; -- 返回函數值

 END;
 $$  -- 結束函數的創建.

3.執行函數插入數據,(可能需要幾十秒)

SELECT createDate();

2. 不使用索引的 查詢

1.查詢手機 爲 18371641007 的學生全部信息(你可能無這個號碼,你需要選一個自己有的號碼)

SELECT * FROM student
WHERE phone = "18371641007";

2.查詢時間: 0.120 sec

3. 使用索引進行查詢

1.給手機號添加索引 默認索引(inser1000wdate是數據庫名,student 是表名, 新默認索引01是自定義hi的索引名)

ALTER TABLE `inser1000wdate`.`student` ADD INDEX `新默認索引01` (`phone`);

由於數據比較多添加索引時間可能有點長

2.添加完成後查詢手機 爲 18371641007 的學生全部信息(你可能無這個號碼,你需要選一個自己有的號碼)

SELECT * FROM student
WHERE phone = "18371641007";

在這裏插入圖片描述
3。如果使用like查詢呢?(依舊長時間
(1)使用like查詢 尾號爲 007 的用戶


SELECT * FROM student 
WHERE `phone`LIKE "%007"

在這裏插入圖片描述

三、索引是一種數據結構 BTree 俗稱 “B樹”。

瞭解更多

四、索引的使用原則

1.索引可以增加查詢的速度
2.索引會減慢增刪,改的速度。

  • 1.不要對經常變動的數據進行索引
  • 2.小表不需要索引
  • 3.一般索引只需要在大表的經常查詢的字段上。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章