ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql索引的分析和优化

2022-07-06 08:00:30  阅读:188  来源: 互联网

标签:customer name EXPLAIN 索引 mysql message 优化 SELECT


准备建表语句

//创建数据库
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

  

 

 

 

标签:customer,name,EXPLAIN,索引,mysql,message,优化,SELECT
来源: https://www.cnblogs.com/q202105271618/p/16437498.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有