子域名的网站放到哪里去,徐汇建设机械网站,做门窗的 在哪个网站跑业务跑业务,前端开发主要使用的工具有ℹ️大家好#xff0c;我是练小杰#xff0c;时间过得真快#xff0c;还有2天#xff0c;2025年2月份就结束了#xff01;#xff01;#x1f606; 本文是针对Mysql数据库中有关性能优化的相关示例#xff0c;通过本文的学习可以深入了解性能优化的各类命令#xff01… ℹ️大家好我是练小杰时间过得真快还有2天2025年2月份就结束了 本文是针对Mysql数据库中有关性能优化的相关示例通过本文的学习可以深入了解性能优化的各类命令 前情回顾: 【Mysql 性能优化详解】 数据库专栏【数据库专栏】【Mysql练习题】 主页【练小杰的CSDN】 真正的平静是内心的平静~~ 性能优化例题 主页【[练小杰的CSDN](https://blog.csdn.net/weixin_55767624?spm1011.2415.3001.5343)】真正的平静是内心的平静~~ 前言使用EXPLAIN命令使用EXPLAIN语句来分析一个查询语句 对比查询中不使用索引和使用索引未使用索引时的查询情况使用索引时的查询情况 LIKE关键字分析查询以x结尾的水果名字 命令分析查询以x开头的水果名字 命令 多列索引创建多列索引验证多列索引的使用情况 or 关键字查询优化分析水果名字为apple或id号为101的情况分析水果名字为apple或id号为l2的情况 JOIN 命令查询members表和members_detail表数据查询结果的几种情况 优化插入命令新建会员信息表和会员组信息表 ANALYZE TABLE 命令分析表 前言 记得学习本文之前先了解博客【Mysql 性能优化详解】再进行本博客的各类操作噢 使用EXPLAIN命令 为了方便理解EXPLAIN命令首先在数据库中创建数据表并插入数据以下是详细命令 创建数据表fruits
CREATE TABLE fruits
(
f_id char(10) NOT NULL,
s_id INT NOT NULL,
f_name char(255) NOT NULL,
f_price decimal(8,2) NOT NULL,
PRIMARY KEY(f_id)
);在表里插入数据
INSERT INTO fruits (f_id, s_id, f_name, f_price) VALUES(a1, 101,apple,5.2),(b1,101,blackberry, 10.2),(bs1,102,orange, 11.2),(bs2,105,melon,8.2),(t1,102,banana, 10.3),(t2,102,grape, 5.3),(o2,103,coconut, 9.2),(c0,101,cherry, 3.2),(a2,103, apricot,2.2),(l2,104,lemon, 6.4),(b2,104,berry, 7.6),(m1,106,mango, 15.6),(m2,105,xbabay, 2.6),(t4,107,xbababa, 3.6),(m3,105,xxtt, 11.6),(b5,107,xxxx, 3.6);使用EXPLAIN语句来分析一个查询语句
EXPLAIN SELECT * FROM fruits;
------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | ALL | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.01 sec)对比查询中不使用索引和使用索引 以下命令是查询语句中不使用索引和使用索引的对比。 未使用索引时的查询情况
EXPLAIN SELECT * FROM fruits WHERE f_nameapple;
------------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | ALL | NULL | NULL | NULL | NULL | 16 | 10.00 | Using where |
------------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.01 sec)使用索引时的查询情况 创建索引并使用EXPLAIN 命令分析使用索引时的查询情况 CREATE INDEX index_name ON fruits(f_name); Query OK, 0 rows affected (0.04 sec)Records: 0 Duplicates: 0 Warnings: 0EXPLAIN SELECT * FROM fruits WHERE f_nameapple;
-----------------------------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
-----------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | ref | index_name | index_name | 1020 | const | 1 | 100.00 | Using index condition |
-----------------------------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.01 sec)
LIKE关键字 查询语句中使用LIKE关键字并且匹配的字符串中含有‘%’符EXPLAIN语句执行如下 分析查询以x结尾的水果名字 命令
EXPLAIN SELECT * FROM fruits WHERE f_name like %x;
------------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | ALL | NULL | NULL | NULL | NULL | 16 | 11.11 | Using where |
------------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.00 sec)
分析查询以x开头的水果名字 命令
EXPLAIN SELECT * FROM fruits WHERE f_name like x%;
-----------------------------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
-----------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | range | index_name | index_name | 1020 | NULL | 4 | 100.00 | Using index condition |
-----------------------------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.01 sec)
多列索引 在表fruits中f_id、f_price字段创建多列索引验证多列索引的使用情况。 创建多列索引
CREATE INDEX index_id_price ON fruits(f_id, f_price);Query OK, 0 rows affected (0.03 sec)Records: 0 Duplicates: 0 Warnings: 0验证多列索引的使用情况
EXPLAIN SELECT * FROM fruits WHERE f_idl2;
--------------------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
--------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | const | PRIMARY,index_id_price | PRIMARY | 40 | const | 1 | 100.00 | NULL |
--------------------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.01 sec)EXPLAIN SELECT * FROM fruits WHERE f_price5.2;
------------------------------------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | fruits | NULL | ALL | NULL | NULL | NULL | NULL | 16 | 10.00 | Using where |
------------------------------------------------------------------------------------------------------------
1 row in set, 1 warning (0.00 sec)or 关键字查询优化 查询语句使用OR关键字的情况 分析水果名字为apple或id号为101的情况
EXPLAIN SELECT * FROM fruits WHERE f_nameapple or s_id101 \G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: fruitspartitions: NULLtype: ALL
possible_keys: index_namekey: NULLkey_len: NULLref: NULLrows: 16filtered: 15.62Extra: Using where
1 row in set, 1 warning (0.00 sec)
ERROR:
No query specified分析水果名字为apple或id号为l2的情况
EXPLAIN SELECT * FROM fruits WHERE f_nameapple or f_idl2 \G;
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: fruitspartitions: NULLtype: index_merge
possible_keys: PRIMARY,index_name,index_id_pricekey: index_name,PRIMARYkey_len: 1020,40ref: NULLrows: 2filtered: 100.00Extra: Using union(index_name,PRIMARY); Using where
1 row in set, 1 warning (0.01 sec)ERROR:
No query specifiedJOIN 命令查询 为了方便观察建立会员表members主要用来存储会员登录认证信息。 以下命令会返回members表中的所有记录并将每个members记录与members_detail表中对应的记录通过LEFT JOIN进行连接。 CREATE TABLE members (Id int(11) NOT NULL AUTO_INCREMENT,username varchar(255) DEFAULT NULL ,password varchar(255) DEFAULT NULL ,last_login_time datetime DEFAULT NULL ,last_login_ip varchar(255) DEFAULT NULL ,PRIMARY KEY (Id)
) ;CREATE TABLE members_detail (member_id int(11) NOT NULL DEFAULT 0,address varchar(255) DEFAULT NULL ,telephone varchar(16) DEFAULT NULL ,description text
) ;SELECT * FROM members LEFT JOIN members_detail ON members.idmembers_detail.member_id;members表和members_detail表数据
members表members_detail表查询结果
查询结果的几种情况
一对一关系 每个members记录对应一个members_detail记录结果中包含所有members字段和对应的members_detail字段。 无对应关系 members记录在members_detail中没有对应记录时members_detail字段为NULL。 一对多关系 members_detail中有多条对应记录时members记录会重复显示每条对应一个members_detail记录。 优化插入命令
新建会员信息表和会员组信息表
CREATE TABLE vip(Id int(11) NOT NULL AUTO_INCREMENT,username varchar(255) DEFAULT NULL,password varchar(255) DEFAULT NULL,groupId INT(11) DEFAULT 0,PRIMARY KEY (Id)
) ;CREATE TABLE vip_group (Id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,remark varchar(255) DEFAULT NULL,PRIMARY KEY (Id)
) ;CREATE TABLE temp_vip (Id int(11) NOT NULL AUTO_INCREMENT,user_name varchar(255) DEFAULT NULL,group_name varchar(255) DEFAULT NULL,group_remark varchar(255) DEFAULT NULL,PRIMARY KEY (Id)
);INSERT INTO temp_vip (user_name, group_name, group_remark) VALUES
(lxj, lian, This is my remark);SELECT v.username,g.name,g.remark FROM vip as v ,vip_group as gWHERE v.groupIdg.Id; 执行INSERT INTO命令后temp_vip表中会插入一条新记录。 通过select语句查询的是获取vip表中每个用户的用户名以及他们所属的组的名称和备注前提是vip表的groupId与vip_group表的Id匹配。 ANALYZE TABLE 命令分析表 该命令用于分析 fruits 表的结构和统计信息以优化查询性能。具体来说ANALYZE TABLE 会更新表的统计信息比如索引的使用情况、行数等帮助 MySQL 查询优化器做出更好的决策。 使用ANALYZE TABLE来分析fruits表执行的语句及结果如下 ANALYZE TABLE fruits;
-----------------------------------------
| Table | Op | Msg_type | Msg_text |
-----------------------------------------
| lxj.fruits | analyze | status | OK |
-----------------------------------------
1 row in set (0.01 sec)Table: 被分析的表名。在这里是 lxj.fruits其中 lxj 是数据库名fruits 是表名。Op: 操作类型。这里是 analyze表示执行的是分析操作。Msg_type: 消息类型。这里是 status表示返回的是状态信息。Msg_text: 消息文本。这里是 OK表示分析操作成功完成。 本文有关Mysql数据库性能优化例题已经讲完了 明天再见啦 主页【练小杰的CSDN】 ℹ️欢迎各位在评论区踊跃讨论积极提出问题解决困惑 ⚠️若博客里的内容有问题欢迎指正我会及时修改