MySQL使我的网站加载非常慢


MySQL makes my site load very slow

我似乎找不到问题所在。

我的主页需要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

我试过了所有的东西

  1. 优化使用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开发工具来测量页面速度。

  1. 在命令行上执行查询需要多长时间?太长——>优化
  2. 你正在加载的页面有多重?(使用Firebug/Chrome开发者工具)->太重?
  3. 把你的页面内容作为静态文件放在你的服务器上,加载它,它明显更快,然后它的代码生成内容。使用memcache之类的服务器端缓存。
  4. 还是不够快?尝试使用不同的web服务器,如Nginx或其他东西。

关于第四点:这是相当高的科技。首先是"低挂的水果"。