首页 / MYSQL / 网站优化—MySQL优化
网站优化—MySQL优化
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了网站优化—MySQL优化,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3972字,纯文字阅读大概需要6分钟。
内容图文
![网站优化—MySQL优化](/upload/InfoBanner/zyjiaocheng/462/496dae933158458a93391c03dc29e7b2.jpg)
?
自身考虑
在做MySQL自身优化的时候,既然要去优化,那就要先去发现问题?如何发现问题?
发现问题
- 需要去定位问题?
答:可以使用MySQL提供的一种慢查询日志功能来发现有问题的sql语句,然后对其进行优化。
- 什么事慢查询日志?
答:MySQL提供的日志,可以用来记录超过某一个规定的时间界限的sql语句。
使用MySQL的慢查询功能
- 开启,MySQL的配置文件里面,默认是不存在的,需要自己去添加,需要重启MySQL
?
- 测试看是否能够记录超过时间界限的sql语句
- 需要构建一张大型数据表
b) 在没有索引的字段上做一个查询
慢查询日志分析:
注意:在有索引的字段上做查询操作
?
总结:通过对比发现使用索引之后,明显查询的速度会快很多,但是使用MySQL的慢查询日志功能记录的时间相对来说还是很粗糙(慢查询的记录时间级别只能是 1s 以上的)的。
这个时候如果需要记录时间为 1s 以下的时候,慢查询就无法发挥其作用,可以使用MySQL提供另外一个功能来完成,这个功能叫做 profile 。
?
MySQL的profile的使用
MySQL提供的一个可以记录更加精确时间的功能,能在1s 以下的sql语句都记录下来。
?
- 使用:默认是关闭的,需要自己开启
# show varibales like "%profil%"; 当有的时候无法记清的时候,可以使用这种模糊匹配查询。
- 开启
# set profiling=1;
- 简单的测试
# show profiles; 可以查看profile工具记录的时间
- 使用该工具还可以详细的分析这个sql语句在执行的时候,每一步(如:连接,权限检查,sql语句编译,打开表。。。。执行,数据返回)花费的时间。
- 例如现在详细的定位第四条sql语句执行时候每一步花费的时间
# show profile for query 4;
注意:为什么使用索引之后会那么快?
答:由于MySQL启动的时候一般也会将索引文件载入内存里面,即使没有,索引的载入也比去磁盘上对一条一条的查找要快。 然后索引本身是非常利于查找的一种结构,这个时候可以通过索引快速的去定位需要查询的数据,当查询到之后,然后在去磁盘上将数据取出来。
?
总结:通过使用上面的这些工具,可以粗略发现,在使用索引之后,效果有明显的提升,所以有必要对MySQL数据库进行索引方面的优化操作。
?
MySQL索引简介
MySQL索引的分类
- 例如现在详细的定位第四条sql语句执行时候每一步花费的时间
- 主键索引:主要是其快速查找和约束的效果,并且一张表里面只能有一个主键索引。不允许字段里面出现null
- 唯一索引:主要是快速查找和约束,但是字段可以有null存在,在建立唯一索引的字段上面的信息不允许重复,但是可以为多个字段建立多个唯一索引。
- 普通索引:主要是为了快速查找,但是需要注意的是,索引建立也是有代价的。索引能快速的查找,但是在数据插入、更新的时候,索引会影响插入的效率。所以普通索引也不要建立的过多。
- 全文索引:一般都是对text字段生效,但是由于MySQL的存储引擎只有MyISAM支持,并且只支持英文,所以可以使用另外的一个软件叫做sphinx来代替全文索引。
- 还有一种情况,就是需要注意一般使用 like 做模糊查询的时候 select * from tableName where name like "%张%"; 是无法使用索引的。 like这种查询就要做全表扫描。
索引的管理
索引是一种排好序的,快速查找的数据结构。
什么叫排好序?
例如上面的这个结构,可以发现,在D字母之后是不可能在出现A字母相关的信息的。
?
- 索引的创建
- 建表时候创建
- 在修改表结构时候创建
?
- 索引显示
?
- 索引的删除
问题:为什么没有提供更新操作?
答:没必要专门设计一个更新,只需要先删,在建。
?
索引的结构
由于索引本身也是一种数据,也需要占据磁盘空间,所以索引也是有数据结构的,常见的数据结构分为两类:B-TREE结构 和 聚簇结构。
?
B-TREE结构
对于B-TREE结构的索引,索引节点里面保存的是物理行地址,当查询的时候需要做回行的操作。对于MyISAM存储引擎的所有索引时候的都是B-TREE结构。
结构图:
聚簇结构
对于聚簇结构的索引,索引节点里面保存的是该行的记录,当查询的时候不需要做回行的操作。对于InnoDB存储引擎的所有索引时候的都是聚簇结构。
注意1:对于InnoDB的存储引擎来说,如果不存在主键索引,这个时候MySQL会自动的维持一个主键索引。
注意2:对于InnoDB的存储引擎来说,次级索引(唯一和普通索引)的索引节点里面保存的信息是对主键索引的一个引用。
注意3:对于InnoDB的存储引擎来说,如果是大批量的添加数据,这个时候会有很大的性能开销, 主要是在大批量插入数据的时候,主键索引也会重建,这个时候由于主键索引的索引节点里面保存的是该行的一个记录,所以要大批量的在内存中移动,开销非常大。
结构图:
?
扩展
阅读书籍
<<高性能MySQL>>
地址:
http://www.linuxidc.com/Linux/2014-10/108464.htm
?
问题1:
解决思路:
只要使得上面的两个条件中的一个或者两个都不成立即可。
那可以做一个刷新缓存的按钮,再要在缓存有效期内更改了,就清除生成的静态页。
网站优化—MySQL优化
标签:
本文系统来源:http://www.cnblogs.com/nyxd/p/5369846.html
内容总结
以上是互联网集市为您收集整理的网站优化—MySQL优化全部内容,希望文章能够帮你解决网站优化—MySQL优化所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。