正在为你努力加载中........

点滴记录 分享
18
2012-9
首页 >> mysql >> mysql 优化建议

mysql 优化建议

在web开发中最重要还是性能如何进行提示,除了硬件方面,代码如何进行优化,另外数据库如何进行高效的操作,一些细节方面需要进行注意下。

1:为查询缓存优化你的语句

大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。

我们一般都遇到这样的查询

mysql_query("select * from 表 where date > curdate()");//此时查询缓存并没有进行开启
$date = date("Y-m-d",time());
mysql_query("select * from 表 where date > $date");//开启查询缓存
看网上的资料是mysql对于curdate now rand这样的函数不会开启查询缓存,这些函数的值是变化的不会开启查询缓存,所以要在php里面使用一个变量进行替代。

2:explain 可以查看你的语句是怎么执行的

使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。使用方法放在查询的最前面。

3:使用1条记录的时候使用limit 1

例如:

select * from user where username='wang' limit 1;

4:为搜索字段新建索引

索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引

在搜索的时候需要注意,有时候会用到like查询,有2点需要注意 1:like %中国% 这个不会使用索引的 2:像like '中国%' 这个会使用索引

5:尽量避免select *

6:最好为每张表设置一个id

7:有的时候能使用enum尽量使用

如果有个字段是性别:一般这个都是确定的。

8:尽可能的使用 字段是 not null

9:表的垂直分割(简单的点说就是比如你有个user表里面最重要的是username和password但是还有用户的一些其他的资料,这个是可填写)所以在新建另外的一张表进行储存即可。

10;选择正确的存储引擎。

 MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

  InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

11:小心永久链接

永久链接”的目的是用来减少重新创建MySQL链接的次数。当一个链接被创建了,它会永远处在连接的状态,就算是数据库操作已经结束了。而且,自从我们的Apache开始重用它的子进程后——也就是说,下一次的HTTP请求会重用Apache的子进程,并重用相同的 MySQL 链接。

  PHP手册:mysql_pconnect()

  在理论上来说,这听起来非常的不错。但是从个人经验(也是大多数人的)上来说,这个功能制造出来的麻烦事更多。因为,你只有有限的链接数,内存问题,文件句柄数,等等。

  而且,Apache 运行在极端并行的环境中,会创建很多很多的了进程。这就是为什么这种“永久链接”的机制工作地不好的原因。在你决定要使用“永久链接”之前,你需要好好地考虑一下你的整个系统的架构。



作者:一根烟的寂寞 分类:mysql
浏览:75531 评论:0

发表评论: