数据库索引的优缺点及使用时的注意事项
数据库索引优化

数据库索引优化数据库索引是提高数据库查询性能的重要手段之一。
当数据库中的数据量逐渐增大时,索引的优化就显得尤为重要。
本文将介绍数据库索引的概念、作用,以及常见的索引优化方法和注意事项。
一、数据库索引的概念与作用数据库索引是对数据库表中一列或多列的值进行排序的结构,以便提高针对这些值的查询速度。
它类似于书籍的目录,可以帮助快速定位到特定的数据行。
索引可以大大减少数据库的查询时间,提高系统的性能。
索引的作用主要体现在以下几个方面:1. 提高查询速度:通过根据索引值的顺序进行快速检索,可以大大减少数据库查询的时间。
2. 加速排序操作:对于需要排序的列,索引可以提供预排序,从而加速排序操作。
3. 约束数据完整性:索引可以用于设置唯一性约束和外键约束,确保数据的完整性。
二、索引优化方法1. 合理选择索引列:选择那些经常被查询的列作为索引列,可以提高查询效率。
同时避免选择过多的索引列,过多的索引会增加写操作的开销。
2. 考虑索引的顺序:对于组合索引,需要根据实际查询的顺序进行考虑。
将最常用的列作为索引的前缀,可以提高查询效率。
3. 考虑索引的覆盖:如果某个查询只需要使用索引列的数据,那么可以使用覆盖索引来避免访问真实数据行,从而提高查询效率。
4. 避免过度索引:过多的索引不仅会增加数据库的存储空间,还会导致增删改操作的性能下降。
因此需要避免过度索引,只选择重要的列进行索引。
5. 定期维护索引:随着数据的增加、修改和删除,索引的性能也会逐渐下降。
因此需要定期对索引进行维护,包括重建索引、压缩索引碎片等。
三、索引优化注意事项1. 避免冗余索引:冗余索引是指多个索引包含相同的列或相同的列组合。
冗余索引不仅会浪费存储空间,还会降低查询和写操作的性能。
2. 注意索引的选择性:选择性是指索引列中不重复的值所占的比例。
索引的选择性越高,查询效率就会越高。
因此需要注意选择性,避免选择选择性较低的列作为索引列。
3. 注意索引的大小:索引的大小会直接影响到数据库的性能。
索引的类型分类、区别、优缺点

索引的类型分类、区别、优缺点导读:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使⽤不同的索引。
MyISAM和InnoDB存储引擎:只⽀持BTREE索引,也就是说默认使⽤BTREE,不能够更换。
MEMORY/HEAP存储引擎:⽀持HASH和BTREE索引。
mysql的索引我们分为三⼤类来讲单列索引(普通索引,唯⼀索引,主键索引)、组合索引、全⽂索引。
⼀、单列索引:⼀个索引只包含单个列,但⼀个表中可以有多个单列索引。
这⾥不要搞混淆了1:普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插⼊重复值和空值,纯粹为了查询数据更快⼀点。
2:唯⼀索引:索引列中的值必须是唯⼀的,但是允许为空值。
3:主键索引:是⼀种特殊的唯⼀索引,不允许有空值。
(主键约束,就是⼀个主键索引)。
主键索引与唯⼀索引的区别:1. 主键是⼀种约束,唯⼀索引是⼀种索引,两者在本质上是不同的。
2. 主键创建后⼀定包含⼀个唯⼀性索引,唯⼀性索引并不⼀定就是主键。
3. 唯⼀性索引列允许空值,⽽主键列不允许为空值。
4. 主键索引在创建时,已经默认为⾮空值+ 唯⼀索引了。
5. ⼀个表最多只能创建⼀个主键索引,但可以创建多个唯⼀索引。
6. 主键更适合那些不容易更改的唯⼀标识,如⾃动递增列、⾝份证号等。
7. 主键可以被其他表引⽤为外键,⽽唯⼀索引不能。
⼆、组合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使⽤了这些字段的左边字段时,索引才会被使⽤,使⽤组合索引时遵循最左前缀集合。
例如,这⾥由id、name和age3个字段构成的索引,索引⾏中就按id/name/age的顺序存放,索引可以索引下⾯字段组合(id,name,age)、(id,name)或者(id)。
如果要查询的字段不构成索引最左⾯的前缀,那么就不会是⽤索引,⽐如,age或者(name,age)组合就不会使⽤索引查询。
三、全⽂索引:全⽂索引,只有在MyISAM引擎上才能使⽤,只能在CHAR,VARCHAR,TEXT类型字段上使⽤全⽂索引,介绍了要求,说说什么是全⽂索引,就是在⼀堆⽂字中,通过其中的某个关键字等,就能找到该字段所属的记录⾏,⽐如有"你是个⼤煞笔,⼆货 ..." 通过⼤煞笔,可能就可以找到该条记录。
MySQL 索引使用有哪些注意事项

MySQL 索引使用有哪些注意事项在使用MySQL索引时,有一些重要的注意事项,以确保索引的有效性和性能优化:1. 选择合适的列:•选择需要经常用于检索、过滤或排序的列作为索引列。
避免对不经常用于查询的列创建索引,以免增加维护成本和降低性能。
2. 使用前缀索引:•对于较长的字符串列,可以考虑使用前缀索引,以减小索引的大小,提高查询性能。
3. 避免过度索引:•不要为每一列都创建索引。
过多的索引可能导致性能下降,因为每次插入、更新或删除时都需要维护索引。
4. 考虑复合索引:•在多个列上创建复合索引,以支持多列的查询条件。
然而,避免创建过于复杂的复合索引,因为它可能不会被有效利用。
5. 小心使用全文索引:•全文索引适用于对文本进行搜索的场景,但并不是所有的应用都需要它。
使用前要仔细评估,并确保它对性能有积极影响。
6. 避免在列上进行计算:•如果可能,避免在索引列上进行计算或函数操作,这会导致索引失效,无法有效使用。
7. 定期重新构建索引:•针对表的数据变更频繁的情况,定期重新构建索引以保持其性能。
8. 监控索引性能:•使用MySQL的性能监控工具,如EXPLAIN语句,来分析查询执行计划,以确保索引得到了正确的使用。
9. 避免在大表上使用ORDER BY:•在大表上使用ORDER BY可能会导致性能问题,因为它可能需要对整个结果集进行排序。
考虑使用合适的索引来优化ORDER BY。
10. 理解索引的存储成本:•索引会占用额外的存储空间,需要权衡存储成本和查询性能。
11. 了解不同类型的索引:• MySQL支持多种类型的索引,包括B树索引、哈希索引等。
了解不同类型索引的特性,选择适合场景的索引类型。
12. 在开发和测试环境中进行优化:•在生产环境之前,建议在开发和测试环境中进行索引优化,并使用模拟的工作负载来评估性能。
这些注意事项有助于确保索引的有效性,提高数据库的查询性能和整体性能。
在具体场景中,需要根据数据库的实际情况进行适当的调整和优化。
数据库索引的使用教程

数据库索引的使用教程数据库索引是提高查询效率的重要工具,它能够加快对数据库中数据的检索速度。
本篇文章将详细介绍数据库索引的使用教程,包括索引的作用、创建索引的注意事项、索引的类型以及优化索引的方法等内容。
一、索引的作用索引是数据库中对某一列或者多个列进行排序的数据结构,能够快速地定位数据并加快数据的检索速度。
它类似于一本书的目录,可以根据索引找到相应的内容,而无需从头开始阅读整本书。
索引可以大大减少数据库的查询时间,提高系统的响应速度和性能。
二、创建索引的注意事项1.选择合适的列进行索引,通常是那些经常用于查询的列或者经常作为查询条件的列。
避免对更新频繁的列进行索引,因为索引的更新可能会导致性能下降。
2.对大型表进行索引时,建议使用分区索引,将数据分成较小的块进行存储,以减少查询时的扫描范围,从而提高查询效率。
3.避免创建过多的索引,索引的数量过多会增加数据库的存储空间和维护成本,并且在写操作时会减慢数据库的速度。
三、索引的类型常见的数据库索引类型包括主键索引、唯一索引、聚簇索引、非聚簇索引和全文索引等。
以下分别介绍各种索引的特点和适用场景:1.主键索引主键索引是用来保证表中每一行的唯一性,并且可以提升对主键列的查询性能。
主键索引在创建表时通过指定主键列来创建,主要用于快速查找和对表进行连接操作。
2.唯一索引唯一索引用于保证指定列的唯一性,可以对表中的多个列建立唯一索引。
当对唯一索引列进行查找时,数据库引擎会自动使用索引进行匹配加速。
3.聚簇索引聚簇索引是按照索引的顺序来组织表记录的物理存储方式,即按照索引的列值进行排序。
聚簇索引在表中只能存在一个,并且通常是主键索引。
它可以提高特定列的查询性能,但会增加对数据的插入、删除和更新操作的成本。
4.非聚簇索引非聚簇索引将索引和表的数据分开存储,即索引和表是分离的。
非聚簇索引可以提高对非索引列的查询性能,但对于索引列的查询速度可能较慢。
5.全文索引全文索引是对文本内容进行索引,常用于搜索引擎等需要进行文本检索的场景。
索引的创建和使用

索引的创建和使用一、介绍索引(Index)是数据库中用于快速查找和访问数据的数据结构。
它类似于书籍的目录,可以帮助我们快速定位到需要的信息。
在数据库中,索引通常是在表中的一个或多个列上创建的,以提高查询效率。
本文将介绍索引的创建和使用方法,帮助读者更好地理解和应用索引。
二、索引的创建在数据库中创建索引可以大大提高查询效率,尤其是对于大型数据表而言。
索引的创建可以通过以下步骤实现:1. 选择需要创建索引的表和列:根据查询的需求,选择适合创建索引的表和列。
通常来说,经常被用于查询和筛选的列是创建索引的首选。
2. 判断索引类型:根据查询需求和数据类型,选择适合的索引类型。
常见的索引类型包括B树索引、哈希索引等。
3. 创建索引语句:使用数据库的特定语法,创建索引的语句。
不同的数据库系统可能有不同的语法,需要根据具体情况进行调整。
4. 执行创建索引语句:在数据库管理工具中执行创建索引的语句,等待索引的创建完成。
三、索引的使用索引的创建完成后,我们可以通过以下方式使用索引提高查询效率:1. 查询语句中使用索引:在编写查询语句时,使用索引所在的列进行条件筛选,可以提高查询效率。
例如,使用WHERE子句中的索引列进行筛选。
2. 索引的覆盖查询:当我们需要查询的列都包含在索引中时,可以进行索引的覆盖查询,避免了读取磁盘上的数据行,从而提高查询性能。
3. 避免使用索引的列进行计算:如果在查询语句中需要对索引列进行计算,会导致索引无法使用。
因此,在查询语句中尽量避免对索引列进行计算操作。
4. 维护索引的更新:当对表中的数据进行插入、更新或删除操作时,需要及时更新索引,保证索引的完整性和准确性。
5. 定期重建索引:为了保持索引的性能和效率,定期对索引进行重建是很有必要的。
可以根据数据库的使用情况和索引的使用频率,选择合适的时间进行重建操作。
四、索引的优缺点索引的创建和使用可以提高数据库的查询效率,但同时也存在一些优缺点需要注意:1. 优点:- 提高查询效率:使用索引可以快速定位到需要的数据,减少了磁盘I/O的次数,提高了查询效率。
索引的作用及优缺点

索引的作⽤及优缺点
索引的作⽤:创建索引能够⼤⼤的提⾼系统的性能
优点:
①通过创建唯⼀性索引,可以保证数据库表中每⼀⾏数据的唯⼀性
②⼤⼤加快数据的检索速度,这也是创建索引的最主要原因
③加快表与表之间的连接,在实现数据的参考完整性⽅⾯特别有意义
④在使⽤分组和排序,⼦句进⾏数据检索时,同样可以显著减少查询中分组和排序的时间
⑤通过使⽤索引,可以在查询的过程中,使⽤优化隐藏器,提⾼系统的性能。
缺点:
①创建索引和维护索引需要时间,这种时间随着数据量的增加⽽增加
②索引需要占物理空间,除了数据表占数据空间之外,每⼀个索引还要占物理空间,如果要建⽴聚簇索引,需要的空间更⼤
③当对表中的数据进⾏增加、删除和修改的时候,索引也要动态的维护,这就降低了数据的维护速度。
索引是创建在数据库的表中的列上。
因此,在创建索引的时候,要考虑哪些列上适合加索引,那些列上不适合加索引。
简述索引的优缺点

索引的优缺点1. 引言索引是数据库中用来提高数据检索效率的重要工具。
它可以帮助我们快速定位和访问数据库中的数据,减少查询时间和资源消耗。
在本文中,我们将探讨索引的优缺点,并分析适用场景。
2. 索引的定义索引是一种数据结构,它包含表中一个或多个列的值,以及指向表中相应行的指针。
通过使用索引,数据库可以更快地定位到满足特定条件的数据行。
3. 索引的优点3.1 提高查询性能当数据库表中的数据量较大时,没有索引时查询操作需要遍历整个表来查找符合条件的记录。
而有了索引后,数据库可以通过使用索引直接定位到符合条件的记录,大大提高了查询性能。
3.2 加速排序对于需要排序操作的查询语句,索引可以帮助数据库避免全表扫描,并使用已经排序好的索引进行快速排序。
这样可以显著减少排序所需时间。
3.3 减少磁盘IO索引使得数据库只需要读取少量磁盘块就能定位到所需数据,减少了磁盘IO次数。
由于磁盘IO是数据库操作中最耗时的部分之一,通过减少磁盘IO可以大大提高数据库的整体性能。
3.4 支持唯一性约束索引可以用来保证表中某一列或多列的唯一性。
通过在唯一索引上创建约束,可以避免插入重复数据,提高数据的完整性和准确性。
3.5 提高并发性能在并发访问环境下,索引可以减少数据冲突和锁竞争,提高数据库的并发性能。
通过使用索引,不同的查询可以同时进行,并且不会相互影响。
4. 索引的缺点4.1 占用存储空间索引需要占用额外的存储空间来存储索引数据结构和索引字段值。
对于大型表或者包含多个索引的表来说,这可能会导致存储空间的浪费。
4.2 增加写操作时间当对表进行插入、更新或删除操作时,数据库不仅需要更新数据本身,还需要更新相应的索引结构。
这样会增加写操作所需时间,并且可能导致频繁的磁盘IO操作。
4.3 索引维护成本高当表中的数据发生变化时,索引需要进行维护以保持索引的正确性和有效性。
这包括索引的创建、删除、重建、更新等操作,会增加额外的系统开销。
简述索引在数据库中的功能和作用

索引在数据库中的功能和作用一、索引的定义索引是数据库管理系统中用于提高数据检索速度的一种数据结构。
它类似于书的目录,可以帮助用户快速找到需要的信息。
在数据库中,索引可以加快数据的检索速度,提高查询效率。
二、索引的作用1. 提高数据检索速度数据库中的数据量往往非常庞大,如果没有索引,每次进行数据检索都需要进行全表扫描,这样的查询效率非常低下。
而通过使用索引,可以大大缩短数据检索的时间,提高查询效率。
2. 加速数据的排序在数据库中,经常需要对数据进行排序操作,如果没有索引,排序操作的性能会受到很大的影响。
通过使用索引,可以加快数据的排序速度,提高排序操作的效率。
3. 提高数据的唯一性和完整性在数据库中,索引可以帮助保证数据的唯一性和完整性。
通过在索引字段上创建唯一性约束,可以确保表中的数据不会出现重复的情况,保证数据的完整性。
4. 减少系统的磁盘I/O在数据库查询过程中,如果没有索引,数据库会进行全表扫描,这样会产生大量的磁盘I/O操作。
而通过使用索引,可以大大减少数据库的磁盘I/O操作,降低系统的负载。
5. 提高数据库的并发性能数据库中的索引可以帮助提高数据库的并发性能。
通过使用索引,可以减少数据的锁定时间,提高数据的并发访问能力,提高数据库的并发性能。
三、常见的索引类型1. B-Tree索引B-Tree索引是最常见的索引类型,它适用于等值查询和范围查询。
通过B-Tree索引,可以快速地定位到需要的数据记录。
2. 哈希索引哈希索引适用于等值查询,它使用哈希算法将索引键转换为哈希值,并将哈希值映射到实际的数据记录。
3. 全文索引全文索引适用于全文搜索,它可以帮助用户快速找到包含特定关键词的文本内容。
4. 空间索引空间索引适用于地理信息系统等特定领域,它可以帮助用户快速地进行地理位置检索。
四、创建索引的注意事项1. 考虑查询的频率在创建索引时,需要考虑查询的频率。
如果一个字段经常用于查询操作,可以考虑为该字段创建索引,提高查询效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本文介绍了数据库索引,及其优、缺点。
针对MySQL索引的特点、应用进行了详细的描述。
分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
注:[1]索引不是万能的!索引可以加快数据检索操作,但会使数据修改操作变慢。
每修改数据记录,索引就必须刷新一次。
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。
这个选项的作用是暂时制止MySQL 在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。
在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE 选项的作用将非常明显。
[2]另外,索引还会在硬盘上占用相当大的空间。
因此应该只为最经常查询和最经常排序的数据列建立索引。
注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。
1. InnoDB数据表的索引与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。
在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。
在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。
"数据行级锁定"的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。
这种锁定将影响到(但不限于)SELECT...LOCK IN SHARE MODE、SELECT...FOR UPDATE命令以及INSERT、UPDATE和DELETE命令。
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。
显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。
2. 限制如果WEHERE子句的查询条件里有不等号(WHERE coloum != ...),MySQL将无法使用索引。
类似地,如果WHERE子句的查询条件里使用了函数(WHERE DAY(column) = ...),MySQL也将无法使用索引。
在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。
比如说,如果查询条件是LIKE ''abc%'',MySQL将使用索引;如果查询条件是LIKE ''%abc'',MySQL 将不使用索引。
在ORDER BY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。
(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加快ORDER BY方面也没什么作用)如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。
比如说,如果某个数据列里包含的净是些诸如"0/1"或"Y/N"等值,就没有必要为它创建一个索引。
普通索引、唯一索引和主索引1. 普通索引普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。
因此,应该只为那些最经常出现在查询条件 (WHERE column = ...)或排序条件(ORDER BY column)中的数据列创建索引。
只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。
2. 唯一索引普通索引允许被索引的数据列包含重复的值。
比如说,因为人有可能同名,所以同一个姓名在同一个"员工个人资料"数据表里可能出现两次或更多次。
如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。
这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL 会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。
也就是说,唯一索引可以保证数据记录的唯一性。
事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。
3. 主索引在前面已经反复多次强调过:必须为主键字段创建一个索引,这个索引就是所谓的"主索引"。
主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。
4. 外键索引如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件。
5. 复合索引索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引。
这种索引的特点是MySQL可以有选择地使用一个这样的索引。
如果查询操作只需要用到columnA数据列上的一个索引,就可以使用复合索引INDEX(columnA, columnB)。
不过,这种用法仅适用于在复合索引中排列在前的数据列组合。
比如说,INDEX(A, B, C)可以当做A或(A, B)的索引来使用,但不能当做B、C或(B, C)的索引来使用。
6. 索引的长度在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。
这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。
在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。
在为BLOB和TEXT类型的数据列创建索引时,必须对索引的长度做出限制;MySQL 所允许的最大索引长度是255个字符。
全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。
如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。
这种检索往往以LIKE %word%的形式出现,这对MySQL来说很复杂,如果需要处理的数据量很大,响应时间就会很长。
这类场合正是全文索引(full-text index)可以大显身手的地方。
在生成这种类型的索引时,MySQL将把在文本中出现的所有单词创建为一份清单,查询操作将根据这份清单去检索有关的数据记录。
全文索引即可以随数据表一同创建,也可以等日后有必要时再使用下面这条命令添加:ALTER TABLE tablename ADD FULLTEXT(column1, column2)有了全文索引,就可以用SELECT查询命令去检索那些包含着一个或多个给定单词的数据记录了。
下面是这类查询命令的基本语法:SELECT * FROM tablenameWHERE MATCH(column1, column2) AGAINST(''word1'', ''word2'', ''word3'')上面这条命令将把column1和column2字段里有word1、word2和word3的数据记录全部查询出来。
注解:InnoDB数据表不支持全文索引。
查询和索引的优化只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。
如果在测试数据库里只有几百条数据记录,它们往往在执行完第一条查询命令之后就被全部加载到内存里,这将使后续的查询命令都执行得非常快--不管有没有使用索引。
只有当数据库里的记录超过了1000条、数据总量也超过了MySQL服务器上的内存总量时,数据库的性能测试结果才有意义。
在不确定应该在哪些数据列上创建索引的时候,人们从EXPLAIN SELECT命令那里往往可以获得一些帮助。
这其实只是简单地给一条普通的SELECT命令加一个EXPLAIN关键字作为前缀而已。
有了这个关键字,MySQL将不是去执行那条SELECT命令,而是去对它进行分析。
MySQL将以表格的形式把查询的执行过程和用到的索引(如果有的话)等信息列出来。
在EXPLAIN命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。
type列指定了本数据表与其它数据表之间的关联关系(JOIN)。
在各种类型的关联关系当中,效率最高的是system,然后依次是const、eq_ref、ref、range、 index和All(All的意思是:对应于上一级数据表里的每一条记录,这个数据表里的所有记录都必须被读取一遍--这种情况往往可以用一索引来避免)。
possible_keys数据列给出了MySQL在搜索数据记录时可选用的各个索引。
key 数据列是MySQL实际选用的索引,这个索引按字节计算的长度在key_len数据列里给出。
比如说,对于一个INTEGER数据列的索引,这个字节长度将是4。
如果用到了复合索引,在 key_len数据列里还可以看到MySQL具体使用了它的哪些部分。
作为一般规律,key_len数据列里的值越小越好(意思是更快)。
ref数据列给出了关联关系中另一个数据表里的数据列的名字。
row数据列是MySQL在执行这个查询时预计会从这个数据表里读出的数据行的个数。
row数据列里的所有数字的乘积可以让我们大致了解这个查询需要处理多少组合。
最后,extra数据列提供了与JOIN操作有关的更多信息,比如说,如果MySQL 在执行这个查询时必须创建一个临时数据表,就会在extra列看到using temporary字样。