簡體   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