繁体   English   中英

从表中选择*从VS中选择表中的列

[英]select * from table where something VS select column from table where something

我想知道两者之间的性能是否有显着差异

select * from table where something

select column from table where something
SELECT * FROM table WHERE something

将检索该表中的所有列,其中

SELECT column FROM table WHERE something

只会检索该列。

这意味着以后会更快。 但是,那是否很明显取决于您的表大小。

你可以阅读这个在类似的问题的答案更多信息

是的,存在性能差异。

SELECT * FROM someTable WHERE something

与之相比会更重

SELECT column FROM someTable WHERE something

因为第一个将必须处理所有列,而第二个将仅处理一个列。 您应该始终喜欢第二个。

有关更多详细信息,请参考不使用select *的原因是什么?

这是我比较SELECT *与选择单个列的比较基准。 这是一个简化的代码,在循环中进行了100次迭代,在我的测试中,我只查询了我所需要的,34个列中有25列,而SELECT *

结果:SELECT *平均花费4.8秒来完成,而SELECT各个列花费了3.2秒! 这非常重要。 所以确实SELECT *要慢得多。 但是,在具有4列的表中进行的较小查询中,选择全部vs *会得到几乎相同的基准。 因此,在我的测试中,SELECT *将对具有许多列的大表中的复杂查询产生性能影响。

$start_time = microtime(true);
for ($x = 0; $x < 100; $x++) {
$results = $dbp->multi(
      "SELECT t1.id, t1.name, t2.field, t2.something, t2.somethingelse "
      . "FROM table1name t1 INNER JOIN table2name t2 ON t2.id = t1.id "
      . "ORDER BY title ASC LIMIT 1, 50");
}
$ms = (number_format(microtime(true) - $start_time, 4) * 1000);
$end_time_sec = floor($ms / 60000) . 'm:' . floor(($ms % 60000) / 1000) . 's:' . str_pad(floor($ms % 1000), 3, '0', STR_PAD_LEFT) . 'ms';
echo "$ms ms / $end_time_sec";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM