没有合适的资源?快使用搜索试试~ 我知道了~
超详细的 SQL 优化大全 !
资源推荐
资源详情
资源评论
t工具,它们都是一个客户端。右边的这一大堆都可以看成是Server(MySQ
L的服务端),我们将Server在细分为sql层和存储引擎层。
当查询出数据以后,会返回给执行器。执行器一方面将结果写到查询缓存
里面,当你下次再次查询的时候,就可以直接从查询缓存中获取到数据了
。另一方面,直接将结果响应回客户端。
2)查询数据库的引擎
① show engines;
② show variables like “%storage_engine%”;
3)指定数据库对象的存储引擎
create table tb(
id int(4) auto_increment,
name varchar(5),
dept varchar(5),
primary key(id)
) engine=myISAM auto_increment=1 default charset=utf8;
SQL优化
1)为什么需要进行SQL优化?
在进行多表连接查询、子查询等操作的时候,由于你写出的SQL语句欠佳
,导致的服务器执行时间太长,我们等待结果的时间太长。基于此,我们
需要学习怎么优化SQL。
2)mysql的编写过程和解析过程
① 编写过程
select dinstinct ..from ..join ..on ..where ..group by ..having ..order
by ..limit ..
② 解析过程
from .. on.. join ..where ..group by ..having ..select dinstinct ..order
by ..limit ..
提供一个网站,详细说明了mysql解析过程:
https://www.cnblogs.com/annsshadow/p/5037667.html
3)SQL优化—主要就是优化索引
优化SQL,最重要的就是优化SQL索引。
索引相当于字典的目录。利用字典目录查找汉字的过程,就相当于利用S
QL索引查找某条记录的过程。有了索引,就可以很方便快捷的定位某条
记录。
① 什么是索引?
索引就是帮助MySQL高效获取数据的一种【数据结构】。索引是一种树
结构,MySQL中一般用的是【B+树】。
② 索引图示说明(这里用二叉树来帮助我们理解索引)
树形结构的特点是:子元素比父元素小的,放在左侧;子元素比父元素大
的,放在右侧。
这个图示只是为了帮我们简单理解索引的,真实的关于【B+树】的说明
,我们会在下面进行说明。
索引是怎么查找数据的呢?两个字【指向】,上图中我们给age列指定了
一个索引,即类似于右侧的这种树形结构。mysql表中的每一行记录都有
一个硬件地址,例如索引中的age=50,指向的就是源表中该行的标识符(“
硬件地址”)。
也就是说,树形索引建立了与源表中每行记录硬件地址的映射关系,当你
指定了某个索引,这种映射关系也就建成了,这就是为什么我们可以通过
索引快速定位源表中记录的原因。
以【select * from student where
age=33】查询语句为例。当我们不加索引的时候,会从上到下扫描源表
,当扫描到第5行的时候,找到了我们想要找到了元素,一共是查询了5次
。
当添加了索引以后,就直接在树形结构中进行查找,33比50小,就从左侧
查询到了23,33大于23,就又查询到了右侧,这下找到了33,整个索引
结束,一共进行了3次查找。是不是很方便,假如我们此时需要查找age=
62,你再想想“添加索引”前后,查找次数的变化情况。
4)索引的弊端
1.当数据量很大的时候,索引也会很大(当然相比于源表来说,还是相当小
的),也需要存放在内存/硬盘中(通常存放在硬盘中),占据一定的内存空
间/物理空间。
2.索引并不适用于所有情况:a.少量数据;b.频繁进行改动的字段,不适
合做索引;c.很少使用的字段,不需要加索引;
3.索引会提高数据查询效率,但是会降低“增、删、改”的效率。当不使用
索引的时候,我们进行数据的增删改,只需要操作源表即可,但是当我们
添加索引后,不仅需要修改源表,也需要再次修改索引,很麻烦。尽管是
这样,添加索引还是很划算的,因为我们大多数使用的就是查询,“查询”
对于程序的性能影响是很大的。
5)索引的优势
1.提高查询效率(降低了IO使用率)。当创建了索引后,查询次数减少了。
2.降低CPU使用率。比如说【…order by age
desc】这样一个操作,当不加索引,会把源表加载到内存中做一个排序操
作,极大的消耗了资源。但是使用了索引以后,第一索引本身就小一些,
第二索引本身就是排好序的,左边数据最小,右边数据最大。
6)B+树图示说明
MySQL中索引使用的就是B+树结构。
关于B+树的说明:
首先,Btree一般指的都是【B+树】,数据全部存放在叶子节点中。对于
上图来说,最下面的第3层,属于叶子节点,真实数据部份都是存放在叶
子节点当中的。
剩余40页未读,继续阅读
资源评论
juan9872
- 粉丝: 405
- 资源: 82
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功