【问题标题】:How to reduce select * from table_name query execution time for table with 200k+ records?如何减少具有 200k+ 记录的表的 select * from table_name 查询执行时间?
【发布时间】:2019-10-13 06:53:11
【问题描述】:

我在 RDS 中设置了 mysql 表,我正在从我的 Web 应用程序中查询。查询本身耗时超过 20 秒,而其他自定义操作加起来耗时不到 0.5 秒。有什么办法可以将查询执行时间缩短到 2-3 秒?

我尝试过索引,但也无济于事。

$table_data = select * from table_name

我希望上述查询的执行时间尽可能短。

【问题讨论】:

  • 您可能有一个很大的表,需要花费一些时间来移动数据。如果您选择所有内容,您将无能为力。
  • 如果您的表很粗糙,您可以通过使其更具关联性来提高速度。就像尝试找出是否可以将列放入自己的定义表中,并确保它们被引用而不是被重复。
  • 没有真正看到示例数据和结构就不能说太多。
  • 最终用户真的对 200k+ 条记录感兴趣吗?我不这么认为。
  • @SalmanA 非常好的观点。我怀疑任何用户都会阅读 20 万行。

标签: mysql sql database laravel select


【解决方案1】:

事情是这样的:

  • 您的查询没有过滤谓词(没有WHERE 子句)。然后您将选择表格的所有行
  • 您的查询有一个*,而不是列的子集。因此,它选择了表格的所有列

总之,你每次都得到整张桌子。

在 SQL 端您无能为力。您的机会现在位于数据库的管理端。获得更多硬件(更快的 CPU)、增加并行性(更多内核)、更快的 SSD?

或者,您可以在应用端使用缓存。每 5 分钟只运行一次查询,并将行保留在内存中。

【讨论】:

    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    相关资源
    最近更新 更多