有关索引的知识点

时间把记忆冲淡
Lepaskan: 2020-05-10 16:15:49
asal
150 orang telah melayarinya

什么是索引?

索引是存储引擎快速找到记录的一种数据结构,也可说就是数据的目录。索引文件以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!

Label berkaitan:
1
sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan