加速数据库查询的响应

时间:2013-02-08 12:17:37

标签: php mysql sql

我在mysql数据库服务器上使用php运行select * from table order by date desc查询,其中表有很多记录,这会减慢响应时间。

那么,有没有办法加快响应速度。如果索引是答案,那么我应该为索引创建所有列。

4 个答案:

答案 0 :(得分:0)

当您拥有WHERE子句或使用已编制索引的字段执行JOIN时,索引会加快搜索速度。在您的情况下,您不这样做:您选择表中的所有条目。所以使用索引对你没有帮助。

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

答案 1 :(得分:0)

您需要使用缓存系统。 我所知道的最好的Memcache加速你的应用程序非常棒,而且根本就没有使用数据库。

答案 2 :(得分:0)

简单回答:你无法使用软件加快速度。

原因:你正在选择一张桌子的全部内容而你说它是一张大桌子。

你可以做的是缓存数据,但不使用Memcache,因为它限制了它可以缓存的数据量(每个密钥1 MB),所以如果你的数据超过了这个数量 - 使用Memcache来缓存巨大的好运结果集没有提出维护密钥和值的有效方案。

索引无效,因为您没有WHERE子句,可能会发生的情况是您可以稍微加快order by子句。在查询之前使用EXPLAIN EXTENDED查看通过网络传输数据所花费的时间以及从查询中检索和排序数据所花费的时间。

如果您的应用程序需要大量数据才能使用,那么您可以选择以下选项:

  • 获得可以更快地推送数据的更好的服务器
  • 重新设计您的应用程序,因为如果它需要这么多数据才能运行,那么它的设计可能不会有效率

答案 3 :(得分:0)

优化查询是一个很大的主题,超出了这个问题的范围

这里有一些突出显示,它会提升你选择声明

  • 使用正确的索引
  • 限制数字记录
  • 使用您需要的列名称(而不是select * from table使用select col1, col2 from table

限制查询大偏移量在mysql中有点棘手 这个用于大偏移的select语句将很慢,因为它必须处理大量数据

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