数据库中最常见的慢查询优化方式是什么
为什么加索引能优化慢查询
你知道哪些数据结构可以提高查询速度
那这些数据结构既然都能优化查询速度,MYSQL为何选择使用B+树
索引
1.索引失效
2.索引用法
3.索引含义
(一)索引
索引的作用相当于图书的目录
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。
MySQL 中常用的索引在物理上分两类,B-树索引和哈希索引。
(二)索引优点
大大加快了数据的查询速度。
(三)缺点
-
1.维护索引需要耗费数据库的资源
-
2.索引需要占用磁盘空间
-
3.当对表的数据进行增删改的时候,增删改的速度会变慢,增删改对底层数据结构进行排序。因为要维护索引,速度会受到影响。
(四)InnoDB搜索引擎的索引分类
1.主键索引
数据库表中设定主键后,数据库会自动创建主键索引,在InnoDB引擎中主键索引也称之为局促索引。
# 创建--主键索引是在建表的时候自动创建
create table t_user(
`id` VARCHAR(20) PRIMARY KEY,
`name` VARCHAR(20)
);
# 查看索引
SHOW INDEX FROM t_user;
2.单值索引(普通索引)
即一个索引只包含单个列,一个表可以有多个单列索引。
--创建普通索引,共有2种方式:创建表的时候创建,创建表后进行创建索引
-- 创建表后进行创建索引
CREATE INDEX name_index ON t_user(`name`);
-- 创建表的时候构建索引
CREATE TABLE t_user1(
`id` VARCHAR(20) PRIMARY KEY,
`name` VARCHAR(20),
KEY(`name`)
);
-- 索引的名默认是字段名
SHOW INDEX FROM t_user1;
3.唯一索引
索引列的值必须唯一,但允许有空值。
-- 创建唯一索引:唯一索引允许为null,只允许一个值为null
CREATE TABLE t_user2(
`id` VARCHAR(20) PRIMARY KEY,
`name` VARCHAR(20),
UNIQUE(`name`)
);
SHOW INDEX FROM t_user2;
4.组合索引(复合索引、联合索引)
即一个索引包含多个列。
-- 创建复合索引(组合索引)
id VARCHAR(20) PRIMARY KEY,
`name` VARCHAR(20),
age INT,
KEY(`name`,age)
);
-- 创建复合索引,
CREATE INDEX nameageindex ON t_user3(`name`,`age`);
SHOW INDEX FROM t_user3;
索引规则
-
1.索引越少越好,因为在修改数据时,每个索引都要进行更新,降低写入速度
-
2.最窄的字段放在建的左边
-
3.避免file sort 排序,临时表和表扫描