加快来自数据库查询的响应
问题描述:
我正在运行一个select * from table order by date desc
查询使用PHP的MySQL数据库服务器,其中表有很多记录,这减慢了响应时间。加快来自数据库查询的响应
那么,有什么方法可以加快响应。如果索引是答案,那么所有列都应该创建索引。
答
当你有一个WHERE子句时,索引加速搜索,或者对你有索引的字段进行JOIN。在你的情况下,你不这样做:你选择表中的所有条目。所以使用索引不会帮助你。
你确定你需要该表中的所有数据吗?当您稍后使用PHP过滤,搜索或聚合这些数据时,您应该研究如何在SQL中执行此操作,以便数据库向PHP发送较少的数据。
答
简单的答案:使用软件无法加速任何事情。
原因:您正在选择一张桌子的全部内容,并且您说这是一张大桌子。
你可以做的是缓存数据,但不使用Memcache,因为它的缓存数据量有限(每个键1MB),所以如果你的数据超过了这个限制 - 使用Memcache来缓存庞大的结果集,而没有提出一个维护键和值的有效方案。
索引不会有帮助,因为您没有得到WHERE子句,可能发生的是您可以稍微加快order by子句。在查询之前使用EXPLAIN EXTENDED查看通过网络传输数据所花费的时间,以及从查询中检索和排序数据所花的时间。
如果您的应用程序需要大量数据,以便为它工作,那么你有以下选项:
- 获得更好的服务器,它可以推动数据的速度
- 重新设计应用程序,因为如果它需要才能运行如此多的数据,它可能在考虑效率的设计不
答
优化查询是一个很大的话题,超出范围这个问题
这里有一些亮点,这将提高你的SELECT语句
- 使用适当的指数
- 限制记录数
- 使用您需要的列名(而不是写
select * from table
使用select col1, col2 from table
)
限制查询大偏移量是有点棘手在mysql 此选择语句对于大偏移将会很慢,因为它hav E要处理大量的数据
SELECT * FROM table order by whatever LIMIT m, n;
来这里优化这个查询是简单的解决方案
select A.* from table A
inner join (select id from table order by whatever limit m, n) B
on A.id = B.id
order by A.whatever
使用'limit'在您的查询及分页记录。 – Rikesh 2013-02-08 12:20:41
你需要每一列吗? – DaveHogan 2013-02-08 12:21:04
不是那么容易:http://dev.mysql.com/doc/refman/5.0/en/optimization.html – 2013-02-08 12:21:28