select * from table where something VS select table from table where something

时间:2014-11-15 09:28:48

标签: mysql sql performance

我想知道

之间的性能是否存在显着差异
select * from table where something

select column from table where something

3 个答案:

答案 0 :(得分:0)

SELECT * FROM table WHERE something

将检索该表中<= p>的所有列

SELECT column FROM table WHERE something

只会回复该列。

这意味着后者会更快。但如果这将是一个重要的差异取决于你的表大小。

您可以阅读类似问题的this答案以获取更多信息

答案 1 :(得分:0)

是的,有性能差异。

SELECT * FROM someTable WHERE something

相比,

会更重

SELECT column FROM someTable WHERE something

因为第一个列必须处理所有列,而第二个列必须只处理一个列。您总是更喜欢第二个。

有关详细信息,我会将您推荐给What is the reason not to use select *?

答案 2 :(得分:0)

这是我用来比较SELECT *与SELECTing各列的基准。它是循环中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";