我想知道
之间的性能是否存在显着差异select * from table where something
和
select column from table where something
答案 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";