当数据库的数据量很大时,为了能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。
索引就像书的目录,当表中的记录有成千上万条时,而对数据库的最频繁操作就是查询,在没有设置索引的情况下,每次查询操作都会从表的第一条记录开始查询,直到查到为止;而设置了索引后,就如书本的目录,可以很方便的查询到符合的记录。
1.
索引的创建
在创建数据表时可以创建索引,也可以单独用create index或alter table语句来增加索引
方法1:
alter table语句
此语句用来创建普通索引、UNIQUE索引(唯一性索引)或PRIMARY KEY索引(也是唯一性索引)。
格式:
alter table 表名 add index 索引名(索引字段1,索引字段2…);
例如:将commodity表的name字段设置索引,索引名为idx_name;操作如下:
mysql> alter table commodity add index idx_name(name);
Query OK, 5 rows affected (0.15 sec)
Records: 5 Duplicates: 0 Warnings: 0
2.
查看表的索引
mysql> show index from commodity;
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| commodity | 0 | PRIMARY | 1 | ID | A | 5 | NULL | NULL | | BTREE | |
| commodity | 1 | idx_name | 1 | name | A | NULL | NULL | NULL | | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)
方法2:create index语句
此语句可对表增加普通索引或UNIQUE索引。
格式:
create index 索引名 on 表名(索引字段1,索引字段2…);
mysql> show index from commodity;
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| commodity | 0 | PRIMARY | 1 | ID | A | 5 | NULL | NULL | | BTREE | |
| commodity | 1 | idx_name | 1 | name | A | NULL | NULL | NULL | | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)
其中,ID为主键;name为普通索引。
3.删除索引
删除表的索引的命令与格式如下:
格式:
drop index 索引名 on 表名;
例如:
mysql> drop index idx_name on commodity;
Query OK, 5 rows affected (0.11 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> show index from commodity;
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| commodity | 0 | PRIMARY | 1 | ID | A | 5 | NULL | NULL | | BTREE | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+--------
4、索引的应用
在没有设置索引时,查看name列。如下:
mysql> select name from commodity;
+-----------+
| name |
+-----------+
| 酸奶 |
| 酸奶 |
| 牙刷 |
| 圆珠笔 |
| 上好佳 |
+-----------+
5 rows in set (0.00 sec)
mysql> create index idx_name on commodity(name);
Query OK, 5 rows affected (0.08 sec)
Records: 5 Duplicates: 0 Warnings: 0
给name 字段设置索引后,如下:
mysql> select name from commodity;
+-----------+
| name |
+-----------+
| 牙刷 |
| 酸奶 |
| 酸奶 |
| 圆珠笔 |
| 上好佳 |
+-----------+
5 rows in set (0.00 sec)
再如:
mysql> select ID from commodity where name='圆珠笔';
+-----------+
| ID |
+-----------+
| 110500001 |
+-----------+
1 row in set (0.00 sec)
当然,在表中记录不多的情况下是不需要索引的。只有在记录成千上万的情况下,设置索引,然后,select查询时会快速的定位,就如上,假如,表commodity中有10000条记录时,而”圆珠笔”在第9999条记录,在没有设置索引的情况下,从第一条记录开始一直到第9999条为止,而设置了索引后,可以直接定位于第9999条。
索引的缺点
到目前为止,我们讨论的都是索引的优点。事实上,索引也是有缺点的。
首先,索引要占用磁盘空间。通常情况下,这个问题不是很突出。但是,如果你创建每一种可能列组合的索引,索引文件体积的增长速度将远远超过数据文件。如果你有一个很大的表,索引文件的大小可能达到操作系统允许的最大文件限制。
第二,对于需要写入数据的操作,比如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度。这是因为MySQL不仅要把改动数据写入数据文件,而且它还要把这些改动写入索引文件。
分享到:
相关推荐
【MySQL索引 使用笔记】 ...以上是对MySQL索引使用的基本概念和实践要点的介绍,实际应用中还需要结合具体业务场景和数据特点进行调整和优化。学习并掌握索引的正确使用,对于提升数据库性能至关重要。
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
### MySQL索引最佳实践 #### 理解索引的重要性 在数据库管理中,索引是一种数据结构,用于提高查询速度。它对于开发者和数据库管理员(DBA)来说至关重要。索引选择不当可能会导致生产环境中的诸多问题。尽管索引...
MySQL 数据库是一个广泛使用的开源关系型数据库管理系统,其性能很大程度上取决于存储引擎和索引的选取与使用。本文将深入探讨 MySQL 中的存储引擎和索引技术,帮助优化数据库性能。 首先,MySQL 提供了多种存储...
### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...
MySQL 索引使用有哪些注意事项呢?.md
MySQL索引 聚集索引 如果你想了解MySQL索引查询优化,你首先应该对MySQL数据组织结构、B-Tree索引、聚集索引,次要索引有一定的了解,才能够更好地理解MySQL查询优化行为。这里主要探讨MySQL InnoDB的聚集索引。
### MySQL索引最佳实践 ...通过以上内容的学习,我们可以了解到MySQL索引的重要性和不同类型的索引在实际应用中的优势与局限性。正确地理解和运用这些知识可以帮助我们更高效地管理和优化数据库性能。
MySQL 索引类型大汇总 MySQL 索引类型是数据库性能优化的关键所在。索引可以大幅度提高查询速度,提高数据库的...索引是 MySQL 数据库性能优化的关键所在,合理的使用索引可以提高查询速度,提高数据库的高效运行。
打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到...
本文将深入探讨如何有效地使用MySQL索引,以及何时可能会导致索引失效。 首先,我们要理解索引的基本原理。索引就像是书籍的目录,它允许数据库快速定位到所需的数据行,而无需逐行扫描整个表。在MySQL中,常见的...
### MySQL的索引优化 ...通过上述内容可以看出,合理使用和优化MySQL索引对于提升数据库性能至关重要。开发者应该根据具体的应用场景来选择合适的索引策略,并定期评估和调整索引设置,以确保系统的高效运行。
MySQL 索引使用树形结构来存储数据,具体来说,就是 B+ 树。B+ 树是一种自平衡的搜索树,它可以保持树的高度尽可能的小,从而提高查询效率。 在 B+ 树中,每个节点都是一个页结点,页结点的大小为 16KB。每个页结点...
本文详细介绍了MySQL InnoDB存储引擎中的索引原理及其实现方式,特别是B+树的应用。通过对比不同的树形结构,我们了解到B+树为何成为数据库索引的理想选择。此外,还讨论了InnoDB与MyISAM的主要差异,以及索引的插入...
### MySQL索引分析和优化 #### 一、索引的重要性及原理 索引在数据库管理中扮演着极其重要的角色,特别是在提高数据检索速度方面。**MySQL索引**本质上是用来加快数据检索过程的一种数据结构,类似于书籍中的目录...