一、索引的介紹:
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.一般索引只需要在大表的經常查詢的字段上。