Mysql的一般优化
mysql 的优化?
优化数据的访问?
-
确认应用程序是否检索了大量超过需要的数据。通常意味访问了太多的行,或者访问了太多的列
-
确认mysql服务器层是否存在分析大量超过需要的数据行。
是否向数据库请求了不需要的数据?
-
case: 查询不需要的记录
比如我们要取出我们在网站上取出100条,我们只要其中的10条,这个时候怎么做呢?
select * from table 这个时候是不是一个全表的扫描,我们这个时候是不是获取了所有的,但是我们只要其中的几条
例如一个分页:
那这个时候我们是不是可以这样操作?
select * from table limit 0,10
除此之外还有什么优化的呢?
比如 我们是不是可以根据自己所需要的字段来挑选呢? 我们跟前端沟通需要展示的字段。
例如简单的多表的集联。
select * from table as A left join table as B on A.id=B.id limit 0,10
总是取出全部的列,每次看到select * 的时候我们都需要用怀疑的眼光,是否是所有的列,取出全部列,会让优化器无法完成索引覆盖扫描这类优化,并且还会为服务器带来额外的I/o,内存和cpu的消耗。另外,公司的DBA是严禁写select * 的语法的
select A.name,B.name from table as A left join table as B on A.id=B.id limit 0,10
重复查询相同的数据:
例如我们经常访问一些相同的数据,我们可以做一些缓存的操作,不必每次都去库里查询。
索引种类
-
普通索引:仅加速查询
-
唯一索引:加速查询 + 列值唯一(可以有null)
-
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
-
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
-
全文索引:对文本的内容进行分词,进行搜索
索引有其明显的优势,也有其不可避免的缺点。 优点 索引的优点如下: 通过创建唯一索引可以保证数据库表中每一行数据的唯一性。 可以给所有的 MySQL 列类型设置索引。 可以大大加快数据的查询速度,这是使用索引最主要的原因。 在实现数据的参考完整性方面可以加速表与表之间的连接。 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间 缺点 增加索引也有许多不利的方面,主要如下: 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。 索引需要占磁盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。 如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。
-
mysql 是否存在扫描额外的记录
最简单的衡量指标
-
响应时间 指的是 服务时间+ 排队时间 服务时间是指真正的花了时间,排队时间是指等待I/o操作完成,也可能等待锁的释放
-
扫描的行数和返回的行数 是否可以走索引,检测扫描行数的一致
-
重构查询的方式
-
一个复杂查询还是多个简单查询