0

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

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

4

4 回答 4

0

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

于 2013-02-08T12:27:28.107 回答
0

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

原因:您正在选择表格的全部内容,并且您说它是一个大表格。

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

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

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

  • 获得更好的服务器,可以更快地推送数据
  • 重新设计您的应用程序,因为如果它需要大量数据才能运行,那么它的设计可能不会考虑到效率
于 2013-02-08T12:38:54.093 回答
0

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

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

于 2013-02-08T12:21:37.673 回答
0

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

这里有一些亮点可以提升您的选择声明

  • 使用适当的索引
  • 限制数量记录
  • 使用您需要的列名(而不是写select * from tableuse select col1, col2 from table

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

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
于 2013-02-08T13:10:15.420 回答