mysql学习笔记-索引

1、索引的作用

  • MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

    -- 打个比方,拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。

  • 索引的缺点是创建和维护索引需要耗费时间,会减慢写入速度

2、增加索引(普通索引,唯一索引,多列索引)

普通索引 -- 注意两种方法 表,列名,索引名的位子

CREATE INDEX t_emptest_inx on t_emptest(empno); -- 创建索引;
ALTER TABLE t_emptest ADD INDEX  t_emptest_inx(empno); -- 创建索引;

唯一索引 unique index

-- 唯一索引,与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
CREATE UNIQUE INDEX  t_emptest_inx on t_emptest(empno); -- 创建索引;
ALTER TABLE t_emptest ADD UNIQUE INDEX  t_emptest_inx(empno); -- 创建索引;

多列索引  t_emptest(empno,ename)

-- 组合索引,在创建组合索引时应该将最常用作限制条件的列放在最左边,依次递减。
CREATE UNIQUE INDEX  t_emptest_inxm on t_emptest(empno,ename);

3、查看索引-索引显示的各字段的含义

SHOW INDEX FROM t_emptest; -- 查看索引

查看各字段含义如下

4、删除索引

ALTER TABLE t_emptest DROP INDEX t_emptest_inx;  -- 删除索引;
DROP INDEX t_emptest_inx ON t_emptest;           -- 删除索引;

5、适合场景

  • 表的主键、外键必须有索引;外键是唯一的,而且经常查询
  • 数据量超过300的表应该有索引;
  • 经常与其他表进行连接的表,在连接字段上应该建立索引;经常连接查询,需要有索引
  • 经常出现在Where子句中的字段,加快判断速度,特别是大表的字段,应该建立索引,建立索引,一般用在select ……where f1 and f2 ,我们在f1或者f2上建立索引是没用的。只有两个使用联合索引才能有用
  • 经常用到排序的列上,因为索引已经排序。
  • 经常用在范围内搜索的列上创建索引,因为索引已经排序了,其指定的范围是连续的

6、不适合场景

  • 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
  • 对于那 些只有很少数据值的列也不应该增加索引。因为本来结果集合就是相当于全表查询了,所以没有必要。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比 例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
  • 对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
  • 修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索引。
  • 不会出现在where条件中的字段不该建立索引。


适用场景原文:https://blog.csdn.net/u012954706/article/details/81241049

猜你喜欢

转载自www.cnblogs.com/shishibuwan/p/11165585.html