2011-02-10 115 views
1

有人可以告訴我以下查詢的昂貴的理論差異嗎?MySQL查詢費用

  • SELECT * FROM posts WHERE category IN(1)
  • SELECT * FROM posts WHERE category IN(1,2)
  • SELECT * FROM posts WHERE category IN(1,2,3)

...等...

感謝。

回答

1

從理論上講,如果你對類的索引和表已經足夠龐大和索引是有選擇性的,那麼

Cost for 1st as baseline = N 
Cost of 2nd = 2 x N 
Cost of 3rd = 3 x N 

如果沒有索引或索引不是選擇性不夠(如類= 1涵蓋表格的10%),那麼它將執行表格掃描。如果表格很小,它甚至不會使用索引。在這種情況下,

Cost of 1st as baseline = N + X 
Cost of 2nd = N + 2X 
Cost of 3rd = N + 3X 

的原因是全表掃描成本N.在掃描過程中,它會使用X的時間挑選出整行(select *),所以有一點點更多地參與處理多類別,但不會影響掃描表格所需的基準時間。

+0

有道理,它將是線性的。我想我讓它太複雜了! – Peter 2011-02-10 02:35:50