内容库架构 说说MySQL 的根蒂架构图
给口试官讲一下 MySQL 的逻辑架构,有白板能够把下面的丹青一下,图片本原于收集。
Mysql逻辑架构图主要分三层:
(1)第一层负责毗邻处理,授权认证,平安等等
(2)第二层负责编译并优化SQL
(3)第三层是存储引擎。
一条SQL查询语句在MySQL中是如何执行的?先搜检该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限会先查询缓存(MySQL8.0 版本以前)。如果没有缓存,阐发器进行词法阐发,提取 sql 语句中 select 等关键元素,然后判断 sql 语句是否有语法错误,好比关键词是否精确等等。最后优化器确定执行方案进行权限校验,如果没有权限就直接返回错误信息,如果有权限就会调用内容库引擎接口,返回执行效果。SQL 优化 日常工作中你是怎么优化SQL的?
能够从这几个维度往返答这个问题:
1,优化表布局
(1)尽量使用数字型字段
若只含数值信息的字段尽量不要设计为字符型,这会低落查询和毗邻的性能,并会增加存储开销。这是因为引擎在处理查询和毗邻时会逐个对照字符串中每一个字符,而对于数字型而言只必要对照一次就够了。
(2)尽可能的使用 varchar 取代 char
变长字段存储空间小,能够节约存储空间。
(3)当索引列大量重复内容时,能够把索引删除掉
好比有一列是性别,险些只有男、女、未知,这样的索引是无效的。
2,优化查询
应尽量避免在 where 子句中使用!=或<>操纵符应尽量避免在 where 子句中使用 or 来毗邻前提任何查询也不要显现select *避免在 where 子句中对字段进行 null 值判断
3,索引优化
对作为查询前提和 order by的字段创建索引避免创建过多的索引,多使用组合索引怎么看执行规划(explain),如何懂得此中各个字段的寄义?
在 select 语句之前增加 explain 关键字,会返回执行规划的信息。
(1)id 列:是 select 语句的序号,MySQL将 select 查询分为简洁查询和复杂查询。
(2)select_type列:透露对应行是是简洁照样复杂的查询。
(3)table 列:透露 explain 的一行正在访问哪个表。
(4)type 列:最紧张的列之一。透露关联类型或访问类型,即 MySQL 决意如何查找表中的行。从最优到最差分别为:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
(5)possible_keys 列:表现查询可能使用哪些索引来查找。
(6)key 列:这一列表现 mysql 现实采用哪个索引来优化对该表的访问。
(7)key_len 列:表现了mysql在索引里使用的字节数,通过这个值能够算出具体使用了索引中的哪些列。
(8)ref 列:这一列表现了在key列记录的索引中,表查找值所用到的列或常量,常见的有:const(常量),func,NULL,字段名。
(9)rows 列:这一列是 mysql 估计要读取并检测的行数,注意这个不是效果集里的行数。
(10)Extra 列:表现额外信息。好比有 Using index、Using where、Using temporary等。
本文地址:http://www.reviewcode.cn/bianchengyuyan/225568.html 转载请注明出处!