我似乎找不到问题所在。
我的主页需要5秒加载,我高度怀疑这是因为MySQL。当我在浏览器中输入我的站点url时,我必须等待5秒才能加载。
我有专用服务器运行英特尔赛扬,centos与1GB RAM。我的数据库大小约为650mb,有200k条记录,我为日期,id等创建了索引。
这是我在主页中使用的SQL查询:
select `id`,`title`,`desc`,`contribution`,`date`,`sponsored`
from tbl_releases where date <= CURRENT_DATE() AND approved='1'
order by `date` desc,`sponsored` desc,`con` desc,`id` desc
limit 100
我试过了所有的东西
- 优化使用my.cnf与buffer等,但它没有提高网站的性能。优化表
- 。
p。S:数据库大小对性能有影响吗?我有超过50%的垃圾在数据库和删除无用的行有助于提高性能吗?
update:我清理了数据库中的垃圾,性能得到了显著提高,我注意到服务器负载和mysql CPU使用率从36%显著下降到5%。但我仍然不明白的是,为什么mysql在处理这么大的数据时会变慢,它应该处理这么多的数据。不是吗?
顺便说一句,我使用的是smarty引擎,尽管如此,网站还是变慢了
网站运行缓慢的原因有很多。
- 糟糕的查询
- 数据库索引不正确
- 大量图片 <
- 大图像/gh>大量的脚本和其他
MySQL可能是一个原因,所以要确保清理你的数据库,创建适当的索引,使用Memcache等。还可以使用EXPLAIN
分析select查询这是我写的一篇关于优化网站的文章
几点想法:
我怀疑你需要每次都运行那个查询。将数据缓存到包含在主页上的静态文件中。定期或当数据发生变化时重新生成文件。
为WHERE
子句中使用的列添加索引可以大大提高SELECT
的时间(以降低INSERT
的速度为代价)。如果您已经有了索引,请使用EXPLAIN SELECT
命令来确保它正在使用它们。
200k行650 MB,这使它怀疑您是否在该表中存储缩略图。如果是这样,那就可以解释了。数据库针对大量微小的数据块进行了优化。文件系统针对少量较大的数据块进行了优化。如果可以将任何大数据块迁移到文件中,您将获得更好的性能。
实际上,如果我没看错的话,您根本没有确认时间是花在数据库上的。在代码中添加基准测试,以跟踪时间的去向。在脚本的开头和结尾或可疑部分的开头和结尾使用$_start = microtime(1);
和echo "Done in " . number_format(microtime(1) - $_start, 2) . " seconds.<br>";
。
那么,从CLI中运行查询需要多长时间呢?
如果它实际上是你的数据库,我会很惊讶。200K行并不大。
如果查询有合适的索引,查询时间会随着时间大小的log而增加;线性否则。
使用MemcacheMemcache将有助于提高服务器的性能
如果您要将结果放入TABLE中,internet explorer(至少对于某些版本)会使它变得很慢。你试过其他浏览器吗?
"我高度怀疑这是因为MySQL"
明知>怀疑
所以测量它!使用Firebug或Chrome开发工具来测量页面速度。
- 在命令行上执行查询需要多长时间?太长——>优化
- 你正在加载的页面有多重?(使用Firebug/Chrome开发者工具)->太重?
- 把你的页面内容作为静态文件放在你的服务器上,加载它,它明显更快,然后它的代码生成内容。使用memcache之类的服务器端缓存。
- 还是不够快?尝试使用不同的web服务器,如Nginx或其他东西。
关于第四点:这是相当高的科技。首先是"低挂的水果"。