mysql索引的分析和优化

准备建表语句

//创建数据库
CREATE DATABASE MysqL_Study;

  但是在创建表的时候,对于int类型,会有int(2),int(4),int(11)这些类型选择

创建表
CREATE TABLE customer_message(
  customer_message_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
  customer_message_name VARCHAR(20) COMMENT '客户姓名',
  customer_message_num INT(4) COMMENT '信息查询次数' 
)

给表加上注释

ALTER TABLE customer_message COMMENT '客户信息'

修改表中字段的注释

alter table 表名 modify column 字段名 字段类型 comment '修改后的字段注释';

INSERT INTO customer_message(customer_message_name,customer_message_num)VALUE
('小白',1000),
('小红',2000),
('小六',2001),
('小黑',2002),
('小绿',2003)

  sql语句分析

 

 select_type字段解释

 

type表示存储引擎查询数据时使用的方式

 

 

 key表示查询时真正使用到的索引,显示的是索引名称

rows表示查询结果需要扫描多少行,原则上是越少越好

key_len表示使用索引的字节数量,可以判断是否使用了组合索引

 

引入复合索引(组合索引)

组合索引创建sql

ALTER TABLE customer_message ADD INDEX(customer_message_name,customer_message_num)

  

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name='小六'
AND customer_message_num=2001

  

 

 like查询和索引相关

删除前期创建的组合索引

#删除customer_message表的customer_message_name索引
DROP INDEX customer_message_name ON customer_message
#删除customer_message表的customer_message_num索引
DROP INDEX customer_message_num ON customer_message

 重新创建索引

ALTER TABLE customer_message ADD INDEX(customer_message_name)

 索引判断sql

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '白%'

 

 EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '%小'

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '%小%'

 

 

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '小%'

  

 索引搜索的数据最好是不要每条记录都带有的关键字,不然依旧是全表扫描

新增数据

INSERT INTO customer_message(customer_message_name,customer_message_num)VALUE
('寂寞寂寞就好',3001),
('不爱代码的程序员',3002),
('同学两亿岁',3003),
('不起眼',3004),
('未知空间',3005)

  

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '寂寞%'

  

 

 

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '不%'

  

 

 

EXPLAIN SELECT * FROM customer_message WHERE customer_message_name LIKE '%就好'

  

 MysqL支持filesort和index两种方式的排序

如果我们Explain分析sql,结果中Extra属性显示Using filesort,表示使用了filesort排序方式,需要优化。

EXPLAIN SELECT customer_message_id  FROM  customer_message  ORDER BY  customer_message_id

  

 

 

 

相关文章

MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导...
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问...
在数据库事务管理中,Undo Log 和 Redo Log 是两种关键日志,...
case when概述 sql语句中的case语句与高级语言中的switch语句...
其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是...
1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2...