mysql-索引

175 阅读2分钟

数据库中最常见的慢查询优化方式是什么

为什么加索引能优化慢查询

你知道哪些数据结构可以提高查询速度

那这些数据结构既然都能优化查询速度,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 排序,临时表和表扫描