Rumah >pangkalan data >tutorial mysql >有关索引的知识点

有关索引的知识点

时间把记忆冲淡
时间把记忆冲淡asal
2020-05-10 15:04:02196semak imbas

什么是索引?

索引是存储引擎快速找到记录的一种数据结构,也可说就是数据的目录。索引文件以B-Tree格式保存

索引的作用?

1.索引能加快数据的检索查找,也能加快数据的分组和排序;
2.索引能保证数据的唯一性
3.索引能加快关系表的连接速度

索引的缺点?

1.索引的创建和维护需要消耗时间,且随索引量的增加而增加
2.索引的创建需要消耗物理空间
3.表中数据进行增删改时,索引也需要动态维护

为什么能够提高查询速度?

主要是顺序查找的效率要比B+tree的结构查找效率低(这个待详细了解)

索引类型?

1.主键索引
primark key 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。注意:一个表只能有一个主键。
2.唯一索引
唯一索引设置的关键字unique 唯一索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
3.普通索引
这是最基本的索引,它没有任何限制。
4.复合索引
即一个索引包含多个列,多用于避免回表查询
5.全文索引

1.  -- 1.添加PRIMARY KEY(主键索引)
   
    ALTER TABLE `table_name` ADD PRIMARY KEY (`column`) ;
   
2.  -- 2.添加UNIQUE(唯一索引)

 ALTER TABLE `table_name` ADD UNIQUE (`column`);
   
3.  -- 3.添加INDEX(普通索引)
   
 ALTER TABLE `table_name` ADD INDEX index_name (`column`);
   
4.  -- 4.添加FULLTEXT(全文索引)
   
 ALTER TABLE `table_name` ADD FULLTEXT (`column`);
   
5.  -- 5.添加多列索引
   
ALTER TABLE `table_name` ADD INDEX index_name (`column1`, `column2`, `column3`);

索引一经创建不能修改,如果要修改索引,只能删除重建。可以使用DROP INDEX index_name ON table_name;删除索引。

重点

为什么在单列索引的基础上还需要组合索引?

因为在不建立组合索引的前提下 mysql只会用到其中一个最有效率的索引 ,效率平庸

组合索引的最左原则是什么?

组合索引usernname,city,age,其实是相当于分别建立了下面三组组合索引:
1.usernname,city,age ;2.usernname,city;3.usernname
为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:

SELECT * FROM mytable WHREE username="admin" AND city="郑州"SELECT * FROM mytable WHREE username="admin"

而下面几个则不会用到:

SELECT * FROM mytable WHREE age=20 AND city="郑州"SELECT * FROM mytable WHREE city="郑州"

创建索引的原则:

  1. 最左原则

  2. 基数小的表最好不要建立索引

  3. 尽量选择区分度高的列作为索引

  4. 尽量的扩展索引,不要新建索引。

  5. 为经常需要作为查询条件、排序、分组和联合操作的字段建立索引

  6. 限制索引的数目,不要盲目创建索引

  7. 尽量使用数据量少的索引,使用前缀做索引

  8. 删除不再使用或者很少使用的索引

关于索引的优化:

  1. 避免在索引列上使用计算

  2. 避免在索引列上使用not

  3. 避免在索引列上使用is null 和is not null

  4. 遵守索引的最左原则

  5. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

  6. 模糊查询不能前置百分号,否则导致全表扫描

  7. where 子句中使用 or 来连接条件 将导致引擎放弃使用索引而进行全表扫描

  8. 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引

Atas ialah kandungan terperinci 有关索引的知识点. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn