这篇文章主要介绍Mysql中sql的生命周期是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql Query Processingsql的执行过程和mysql体系架构基本一
这篇文章主要介绍Mysql中sql的生命周期是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
sql的执行过程和mysql体系架构基本一致
建立与 MySQL 的连接,用于查询SQL语句,判断权限 。
对 SQL 语句进行硬解析,分析器先会做词法分析。分析SQL 语句的组成成分。判断输入的 SQL 语句是否满足语法规则。
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。 不同的执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。
EXPLaiN命令输出MySQL将如何执行你的SQL语句,但不会返回数据
[root@localhost][(none)]> explain select * from 表名 where project_id = 36;
+----+-------------+--------------------------+------------+------+---------------+------------+---------+-------+--------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------------------+------------+------+---------------+------------+---------+-------+--------+----------+-------+
| 1 | SIMPLE | 表名 | NULL | ref | project_id | project_id | 4 | const | 797964 | 100.00 | NULL |
+----+-------------+--------------------------+------------+------+---------------+------------+---------+-------+--------+----------+-------+复制代码
system > const > eq_ref > ref > range > index > ALL(查询效率)
光看 filesort 字面意思,可能以为是要利用磁盘文件进行排序,实则不全然。 当MySQL不能使用索引进行排序时,就会利用自己的排序算法(快速排序算法)在内存(sort buffer)中对数据进行排序,如果内存装载不下,它会将磁盘上的数据进行分块,再对各个 数据块进行排序,然后将各个块合并成有序的结果集(实际上就是外排序)。
当对连接操作进行排序时,如果ORDER BY仅仅引用第一个表的列,MySQL对该表进行filesort操作,然后进行连接处理,此时,EXPLAIN输出“Using filesort”;否则,MySQL必 须将查询的结果集生成一个临时表,在连接完成之后行行filesort操作,此时,EXPLAIN输出“Using temporary;Using filesort”。
为解释方便,来一个demo:
DROP TABLE IF EXISTS user;
CREATE TABLE user(
id int AUTO_INCREMENT PRIMARY KEY,
user_name varchar(30) NOT NULL,
gender bit(1) NOT NULL DEFAULT b’1’,
city varchar(50) NOT NULL,
age int NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE user ADD INDEX idx_user(user_name , city , age);
复制代码
SELECT * FROM user WHERE city='上海';
SELECT * FROM user WHERE age='26';
SELECT * FROM user WHERE age='26' AND city=‘上海';
SELECT * FROM user WHERE user_name LIKE '%N';
SELECT * FROM user WHERE user_name='JueJin' AND city LIKE '上%' AND age=31;
SELECT * FROM user WHERE user_name=concat(user_name,'PLUS');
SELECT user_name, city, age FROM user WHERE user_name='Tony' AND age='28' AND city='上海';
因为要查询的字段(user_name, city, age)都包含在组合索引的索引列中,所以就使用了覆盖索引查询,查看是否使用了覆盖索引可以通过执行计划中的Extra中的值为Using index则证明使用了覆盖索引,覆盖索引可以极大的提高访问性能。
在排序操作中如果能使用到索引来排序,那么可以极大地提高排序的速度,要使用索引来排序需要满足以下两点即可:
排序可用demo:
排序不可用demo:
不要返回应用户程序所不需要的数据限制返回数
LIMIT:MySQL并不能按照需求返回数据量,也就是MySQL总是会查询出全部数据,使用LIMIT子句其实是为了减小网络数据传输的压力,并不会减小数据的读取行数。
去掉不需要的列
正确使用索引的优点
对于如下列考虑使用索引
考虑针对字符串型列使用前缀索引
以上是mysql中sql的生命周期是什么的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网数据库频道!
--结束END--
本文标题: mysql中sql的生命周期是什么
本文链接: https://www.lsjlt.com/news/53282.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0