【问题标题】:Why does a Mysql table size affects runtime with LIMIT command为什么 Mysql 表大小会使用 LIMIT 命令影响运行时
【发布时间】:2016-05-11 10:00:09
【问题描述】:

我有 2 个表 - info 和 cmets。 info 有 270,000 行,而 cmets 只有 100 行。

我运行一个 php 脚本,从数据库中选择数据并将其编码为 json 格式。 PHP 脚本还将响应限制为仅前 10 行,并且 PHP 文件 Info.php 和 Comments.php 完全相同,只是名称不同。

那么,当它只打印前 10 行时,为什么 270,000 行的表比 100 行的表需要更多的时间来加载? cmets 需要 1 秒,而 info 需要 10 秒。

这是PHP查询代码,很简单:

Info.php:$query = "SELECT * FROM info ORDER BY id LIMIT 10;";

comments.php:$query = "SELECT * FROM comments ORDER BY id LIMIT 10;";

出于测试目的,它们都具有相同的列和相同的数据,唯一的区别是行数。所以我用 PHP 测试了时间:

Info.php:

select from database time: 0.6090 seconds
time taken to decode JSON: 6.4736 seconds

而 Comments.php 结果:

select from database time: 0.7309 seconds
time taken to decode JSON: 1.7178 seconds

谢谢

【问题讨论】:

  • 在您的数据库查询之前和之后创建一个计时器..然后在 json 编码之前和之后..是数据库还是编码占用了时间?每个表有多少列?
  • 如果您认为应该归咎于数据库,请对查询进行解释并发布结果
  • @Dale 出于测试目的,它们都具有相同的列和相同的数据,唯一的区别是行数。所以我用 PHP 和 Info.php 结果测试了时间:从数据库中选择时间:0.6090 秒解码 JSON 所需的时间:6.4736 秒而 Comments.php 结果:从数据库中选择时间:0.7309 秒解码 JSON 所需的时间:1.7178 秒跨度>
  • 为什么 JSON 会在不同的时间解码相同的数据?
  • @jokesonhiltionhotel 因为要解码的纯数据量

标签: php mysql


【解决方案1】:

这可能是因为 MySQL 的 select 子句执行顺序。 MySQL 引擎必须首先按 id 列对表中的所有行进行排序,然后将结果限制为 10 行。 Take a look at this answer.

【讨论】:

  • 其实我确实试过去掉'ORDER BY'命令,查询时间没有改变。
  • 可以考虑使用视图来加速执行吗dev.mysql.com/doc/refman/5.7/en/views.html
  • 可以不使用php执行查询吗?用mysql命令行?
猜你喜欢
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
  • 2019-10-01
相关资源
最近更新 更多