mysql explain 通过explain sql语句,以帮助选择更好的索引和写出更优化的查询语句。 当然了,如果用like '%username%' 是不会使用索引的,只有使用 like 'username%'才会使用索引,当然了对普通的 <,<=,=,>,>=,BETWEEN,IN是使用索引的
explain显示了mysql如何使用索引来处理select语句以及连接表,在select语句前加上explain就可以了:
如:explain select surname form user,company where user.id=company.id
- 分析结果形式如下:
- table | type | possible_keys | key | key_len | ref | rows | Extra
- EXPLAIN列的解释:
-
- table
- 显示这一行的数据是关于哪张表的
-
- type
- 这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL
1.全表扫描 2.索引扫描 3.范围扫描 4.唯一索引扫描 5.常量扫描
这几种数据访问方式的访问速度依次递增。
-
- possible_keys
- 显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
-
- key
- 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
-
- key_len
- 使用的索引的长度。在不损失精确性的情况下,长度越短越好
-
- ref
- 显示索引的哪一列被使用了,如果可能的话,是一个常数
-
- rows
- MYSQL认为必须检查的用来返回请求数据的行数
-
- Extra
- 关于MYSQL如何解析查询的额外信息。Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢
extra列返回的描述的意义
Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
Not exists
MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,
一、索引分单列索引和组合索引
单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。
组合索引:即一个索包含多个列。
二、介绍一下索引的类型
1.普通索引。
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
(1)创建索引:create INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定length,下同。
(2)修改表结构:alter tableName ADD INDEX [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:create TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
2.唯一索引。
它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:
//创建索引
create UNIQUE INDEX indexName ON tableName(tableColumns(length))
//(2)修改表结构:
alter tableName ADD UNIQUE [indexName] ON (tableColumns(length))
//(3)创建表的时候直接指定:
create TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));
create TABLE testIndex(
i_testID INT NOT NULL AUTO_INCREMENT,
vc_Name VARCHAR(16) NOT NULL,
PRIMARY KEY(i_testID));
4.全文索引
删除索引的语法:drop INDEX index_name ON tableName
了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将vc_Name,vc_City,i_Age建到一个索引里:
alter TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);--注意了,建表时,vc_Name长度为50,这里为什么用10呢?因为一般情况下名字的长 度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高insert的更新速度。
建立这样的组合索引,其实是相当于分别建立了
vc_Name,vc_City,i_Age
vc_Name,vc_City
vc_Name
四、使用索引
到此你应该会建立、使用索引了吧?但什么情况下需要建立索引呢?一般来说,在where和join中出现的列需要建立索引,但也不完全如此,因为 MySQL只对 <,<=,=,>,>=,BETWEEN,IN,以及某些时候的like(后面有说明)才会使用索引。
select t.vc_Name FROM testIndex t LEFT join myIndex m ON t.vc_Name=m.vc_Name where m.i_Age=20 AND m.vc_City='郑州' 时,有对myIndex表的vc_City和i_Age建立索引的需要,由于testIndex表的vc_Name开出 现在了join子句中,也有对它建立索引的必要。
刚才提到了,只有某些时候的like才需建立索引?是的。因为在以通配符 % 和 _ 开头作查询时,MySQL不会使用索引,如
select * FROM myIndex where vc_Name like'erquan%'
会使用索引,而
select * FROM myIndex wheret vc_Name like'%erquan'
就不会使用索引了。
分享到:
相关推荐
在《mysql索引优化[CU经典提问和解答过程].doc》文档中,可能会涵盖更多具体的案例和解答,帮助读者更深入地理解如何通过`EXPLAIN`分析来优化MySQL查询。通过不断实践和学习,我们可以提升数据库性能,确保系统的...
### MySQL 索引与执行计划 #### 一、索引与执行计划 ##### 1.1 索引入门 在深入探讨之前,我们首先需要理解什么是索引以及其重要性。 ###### 1.1.1 索引是什么 索引(Index)在MySQL中是一种帮助数据库高效获取...
MySQL中的索引是一种为了加速数据查询的特殊...总之,了解MySQL的索引原理和`EXPLAIN`的使用是提升数据库性能的关键。根据业务需求和数据特点,合理设计索引并利用`EXPLAIN`进行查询分析,可以有效地优化数据库的性能。
MySQL存储引擎 区别(MyISAM, InnoDB) 1,innodb支持事务,myisam不支持事务 2,innodb支持外键,而myisam不支持。对一个支持外间的innodb转换为myisam时会失败 3,innodb不保存表的具体行数,执行 select count(*)...
MySQL索引优化是数据库性能提升的关键环节,本篇主要探讨了几个关于MySQL索引使用和优化的重要知识点。 首先,创建了一个名为`employees`的员工记录表,其中包含`id`(主键)、`name`、`age`、`position`和`hire_...
MySQL索引优化是数据库性能提升的关键技术之一,尤其在处理大量数据时,高效索引能够显著加快查询速度,降低服务器负载。本课件主要聚焦于MySQL数据库的索引原理、优化策略以及相关存储过程和触发器的应用。 首先,...
“MySQL教程”可能涵盖了安装MySQL、创建数据库和表、数据类型、索引、视图、存储过程、触发器等基本概念。在创建数据库时,你需要指定字符集和排序规则,确保数据的正确存储和检索。数据类型包括数值类型(如INT、...
【MySQL索引 使用笔记】 MySQL数据库是世界上最流行的开源关系型数据库管理系统之一,其高效的数据查询能力在很大程度上依赖于索引。本笔记将深入探讨MySQL中的索引使用,旨在帮助你提升数据库性能。 1. 索引的...
### MySQL索引详解 #### 一、MySQL索引概述 索引在数据库中扮演着至关重要的角色,它能够显著提高数据检索的速度。简单来说,索引就像图书的目录一样,帮助用户快速定位所需数据的位置。当数据库表中的数据量增大...
- 使用EXPLAIN分析SQL执行计划,检查是否使用了索引以及索引的使用效率。 - 减少不必要的联接操作。 - 避免使用SELECT *,只选择需要的列。 - **缓存(Caching)** - 使用MySQL缓存机制,如查询缓存(query cache)...
这涉及如何合理设计数据库架构,避免全表扫描,使用EXPLAIN分析查询执行计划,以及调整数据库参数等。你还需要了解如何使用JOIN操作连接多个表,以及何时使用子查询或联接会更高效。 在实际应用中,备份与恢复策略...
MySQL的EXPLAIN命令是数据库管理员和开发者用来分析SQL查询执行计划的重要工具。它能帮助我们理解MySQL如何处理查询,从而优化查询性能。以下是对EXPLAIN命令及其相关知识点的详细解释。 1. **EXPLAIN调用方式**: ...
本文主要记录了笔者在学习mysql过程中,整理的笔记,试用于1-3年的开发。在学习的过程中做的记录,可以根据实际情况结合理论,来完成数据库查询优化。
#### 二、查看MySQL索引的方法 在MySQL中,可以通过多种方式来查看数据库中的索引信息。其中一种常用的方法是利用`INFORMATION_SCHEMA.STATISTICS`表来获取相关信息。具体的SQL语句如下: ```sql SELECT * FROM ...
MySQL索引是数据库管理系统中用于加速数据检索的关键组件。它们的工作原理类似于书籍的索引,允许数据库系统快速定位和访问所需的数据,而无需遍历整个表。MySQL支持多种类型的索引,包括普通索引、唯一性索引和主键...
### MySQL Explain 深度解析 #### 一、Explain 的意义 在数据库查询优化领域,`EXPLAIN` 是一个非常强大的工具,它能够帮助我们分析 `SELECT` 语句的执行过程,揭示出查询效率低下的原因。通过 `EXPLAIN` 的分析...
MySQL 的 Explain 分析 SQL 语句性能(慢查询和加没加索引) MySQL 的 Explain 分析 SQL 语句性能是数据库性能优化的重要工具之一。通过 Explain 命令可以分析 SQL 语句的执行计划,了解 SQL 语句的执行过程,找出...
一、MySQL索引 1. 索引类型:MySQL支持多种索引类型,包括B-Tree(默认索引类型)、Hash、Full-text(全文索引)以及R-tree(空间数据索引)。B-Tree索引适用于范围查询,而Hash索引适用于等值查询,Full-text索引...