伴随着应用的频繁使用,软件也变得越来越慢,可能是内存的问题,可能是软件设计的问题的,但是你有没有想过,你天天操作的数据库也会拖累你的应用程序呢?
下面就教你十招,搞定数据库性能,让你的应用飞起来。让小编带你来一一见识它们的独特之处。
杀手锏1: 设置一定时间后优化重建数据库
MySQL check –o –all –database 会让ibdata1不断的增大,因此真正的优化只能是重建数据库表结构。
杀手锏2 :减少磁盘写入的操作
- 准备足够大的写入缓存 innodb_log_file_size,这个语句和写磁盘操作有密切的联系
- 避免双写入缓冲
杀手锏3 :提高磁盘读写效率
RAID0 在使用名为EC2虚拟磁盘时,使用RAIDO 可以极大的提高磁盘的读写效率
杀手锏4 :多使用UNION INDEX 来代替UNION
我们知道使用索引能够有效的减少数据库中的数据量来提高查询效率,因为索引可以直接寻找目标对象,不需要全部检索一遍数据库的。
举个例子吧:数据库索引 就如同在图书管理寻找你所要找的图书,查询系统之后我们能够知道那本本在哪个区域,在那个货架,那样就可以快速的找到我们所想要的图书。不需要在偌大的图书馆里一本一本的寻找,数据库索引就是这样相同的道理。
索引代码:
使用索引在数据库中查询用户的 账号和密码:
杀手锏5 :将数据库保存在内存磁盘中
随着硬盘技术的提高,很多人都会将数据库存放在固态磁盘(SSD)中,尽管当前的固态磁盘比移动硬盘快的多,但是它仍然不能与电脑的内存(RAM)相比,毕竟数据从系统内存中读取要比其他一切存储都要快,建议使用内存磁盘。
随着现在电脑设备技术的前进,你不在需要将所有的数据库都存入内存中,就可以获取内存中大部分性能优势,你只需要将经常使用到的数据存入内存中即可。
在上面的图表中,您可以看到高达每秒2,000个I/O操作,可以看出来将频繁使用的数据存入到内存中很适合。
杀手锏6:充分利用日志查询
将所有的查询记录,使用ORM系统或者生成查询语句系统比较有效。
切记,请不要在生成环境使用,不然你的磁盘空间会被占满的。
执行1s的查询:
杀手锏7:用NOSQL的方式来使用MySQL
使用HnadleSocket跳过MySQL的SQL解析层,使得MySQL 变为真正的NLSQL.
杀手锏8:使用JOIN (连接)来替代子查询
MySQL 4.1 之后开始支持子查询,即可以使用select 来创建一个单列的查询结果,然后将这个查询结果作为条件在另一个查询中使用。举个例子:我们现在需要在系统中,将没有任何订单的客户从系统中删除,此时我们可以使用子查询,先从销售单 表中将所有有订单的客户ID取出,然后将ID 传递给主查询。
接下里我们找出没有订单的客户ID,进一步优化。
我们知道使用子查询可以一次性就完成,原本需要很多步骤才能够完成的SQL操作,同时还可以避免表锁死,同时操作简单。
含有join的连接来代替子连接,查询速度会变得更快,原因是:MySQL不需要在内存中再创建临时表来完成这个主查询和子查询这两个步骤,自然而然使用JOIN 连接就变得很快了。
杀手锏9:尽量使用”=”而不用”> ”或者”<”
“=” 扩大了索引的范围
杀手锏10:不要总是使用 “SELECT *”
在正常情况下,使用索引是可以提高查询速度的。但是当SQL语句使用累赘时,索引将无法发挥它应有的作用。
很显然,虽然下面两个查询返回的结果都是一样的,但是后者的效率要高很多。
下面的语句:
结论:
MySQL的性能优化可能方法很多,但是我例举出来的这10个方法是经常使用到的。如果你有更好的方法,请告诉我。