MySQL数据库--索引

1. 数据库索引

1.1 索引概述

索引就类似于书籍中的目录,在一本书中,无须阅读整本书,利用目录就可以快速査找所需信息,书中的目录是一个词语列表,其中注明了包含各个词的页码
而数据库索引则是在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据
数据库中的索引是某个表中一列或者若干列值的集合,以及物理标识这些值的数据页的逻辑指针清单

1.2 索引作用

设置了合适的索引之后,数据库利用定位技术,加快查询速率
当表很大的时候或者内容很多的时候,或者查询涉及到多个表时,使用索引可使查询加快成干倍
可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本
通过创建唯一性索引保证数据表数据的唯一性
可以加快表与表之间的连接
在使用分组和排序时,可大大减少分组和排序时间
需要额外的磁盘空间

1.3 创建索引的原则依据

敲黑板,划重点,要在合适的地方设置索引,不然的话就变成了数据库的负担

表的主键、外键必须有索引
数据量超过300行的表应该有索引
经常与其他表进行连接的表,在连接字段上应该建立索引
唯一性太差的字段不适合建立索引
更新太频繁地字段不适合创建索引
经常出现在 Where子句中的字段,特别是大表的字段,应该建立索引
索引应该建在选择性高的字段上
索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引

二、索引的分类

逻辑的角度来划分,索引分为普通索引、唯一索引、主键索引、组合索引和全文索引。

2.1 普通索引

2.1.1 普通索引格式

普通索引是最基本的索引,它没有任何限制,也是大多数情况下用到的索引。

直接创建索引的方式
mysql>CREATE INDEX index_name ON table_name (column(length));
column 是指定要创建索引的列名
length 是可选项

索引列的长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000 个字 节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。

2.1.2 创建普通索引

方法一:

mysql> create table info (id int(4) not null,name varchar(10) not null,address varchar(50) default '未知');    ##创建一个表结构
Query OK, 0 rows affected (0.01 sec)

mysql> describe info;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   |     | NULL    |       |
| name    | varchar(10) | NO   |     | NULL    |       |
| address | varchar(50) | YES  |     | 未知    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> create index id_index on info(id);    ##为info表中的id创建索引
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> describe info;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | MUL | NULL    |       |
| name    | varchar(10) | NO   |     | NULL    |       |
| address | varchar(50) | YES  |     | 未知    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

在这里插入图片描述
方法二:

修改表结构的方式添加索引
mysql>ALTER TABLE table_name ADD INDEX index_name (column(length));
mysql> alter table info add index name_index (name);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> describe info;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(4)      | NO   | MUL | NULL    |       |
| name    | varchar(10) | NO   | MUL <
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
索引是一种数据结构,它可以帮助加快数据库表中数据的检索速度。在 MySQL 数据库中,索引通常被称为 B-tree 索引,它可以加速 SELECT、UPDATE 和 DELETE 操作的速度。在本文中,我们将介绍 MySQL 中的索引,包括索引的类型、如何创建索引、如何使用索引以及索引的优化。 ## 索引的类型 MySQL 支持多种类型的索引,包括以下几种常见的类型: - PRIMARY KEY 索引:用于唯一标识数据库表中的每一行记录。 - UNIQUE 索引:用于确保表中某一列的值是唯一的。 - INDEX 索引:用于加速表中的数据检索操作。 - FULLTEXT 索引:用于全文搜索操作。 ## 如何创建索引MySQL 中,可以使用 CREATE INDEX 语句来创建索引。例如,下面的语句创建一个名为 idx_last_name 的索引,用于加速对 employees 表中 last_name 列的检索: ``` CREATE INDEX idx_last_name ON employees (last_name); ``` 需要注意的是,创建索引可能会增加数据库表的插入、更新和删除操作的时间开销。因此,应该谨慎地考虑是否需要创建索引,以及应该创建哪些索引。 ## 如何使用索引MySQL 中,可以使用 EXPLAIN 语句来查看查询语句的执行计划。如果查询语句使用了索引,则在执行计划中会显示使用的索引名称。例如,下面的语句使用 EXPLAIN 来查看对 employees 表进行 last_name 列检索的执行计划: ``` EXPLAIN SELECT * FROM employees WHERE last_name = 'Smith'; ``` 如果查询语句没有使用索引,则可以使用 FORCE INDEX 语句来强制使用指定的索引。例如,下面的语句强制使用 idx_last_name 索引来对 employees 表进行 last_name 列检索: ``` SELECT * FROM employees FORCE INDEX (idx_last_name) WHERE last_name = 'Smith'; ``` 需要注意的是,强制使用索引可能会导致性能下降。因此,应该仅在必要时使用强制索引。 ## 索引的优化 在 MySQL 中,可以使用 OPTIMIZE TABLE 语句来优化数据库表。优化表可以帮助减少表中的碎片,提高表的查询性能。例如,下面的语句优化 employees 表: ``` OPTIMIZE TABLE employees; ``` 此外,还可以使用 ANALYZE TABLE 语句来分析表中的数据分布情况,以便优化索引。例如,下面的语句分析 employees 表的数据分布情况: ``` ANALYZE TABLE employees; ``` 需要注意的是,索引的性能可能会受到数据分布的影响。如果表中的数据分布不均匀,则可能需要重新设计索引或优化查询语句以提高性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值