加快来自数据库查询的响应

加快来自数据库查询的响应

问题描述:

我正在运行一个select * from table order by date desc查询使用PHP的MySQL数据库服务器,其中表有很多记录,这减慢了响应时间。加快来自数据库查询的响应

那么,有什么方法可以加快响应。如果索引是答案,那么所有列都应该创建索引。

+1

使用'limit'在您的查询及分页记录。 – Rikesh 2013-02-08 12:20:41

+1

你需要每一列吗? – DaveHogan 2013-02-08 12:21:04

+0

不是那么容易:http://dev.mysql.com/doc/refman/5.0/en/optimization.html – 2013-02-08 12:21:28

当你有一个WHERE子句时,索引加速搜索,或者对你有索引的字段进行JOIN。在你的情况下,你不这样做:你选择表中的所有条目。所以使用索引不会帮助你。

你确定你需要该表中的所有数据吗?当您稍后使用PHP过滤,搜索或聚合这些数据时,您应该研究如何在SQL中执行此操作,以便数据库向PHP发送较少的数据。

+0

感谢您的回答。是的,我需要所有数据导致它在移动应用程序中使用,我现在不能更改应用程序代码,只有后端。移动应用程序编码为一次获取​​所有数据。 – user11085 2013-02-08 12:27:47

+0

是否有可能以不同的方式存储数据? – Philipp 2013-02-08 12:30:32

+0

现在不能更改 – user11085 2013-02-08 12:34:42

你需要使用缓存系统。 我认识的最好的Memcache加速你的应用程序真的很棒,它根本不使用数据库。

简单的答案:使用软件无法加速任何事情。

原因:您正在选择一张桌子的全部内容,并且您说这是一张大桌子。

你可以做的是缓存数据,但不使用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