2013-11-04 120 views
0

這更多的是關於查詢的性能和速度以及它們如何在關係數據庫中工作的理論問題。MYSQL在某些情況下的性能!=某些東西

可以說我有一個有100,000行的表格,有一個名爲status的列。

10,000有狀態「有效」,而90,000有狀態「無效」。

如果我使用!='active'進行查詢。那麼我真的只是默認查詢活動行嗎?還是它仍然需要'掃描'所有行

我的意思是性能會受到影響,取決於我作爲非活動狀態的行數。

例如....如果我有10,000,000行無效,並且10,000有效。請問活動行上的查詢會花費相同的時間量(我有100,000個非活動狀態,或10,000,000個非活動狀態),因爲Im'通過!='活動'查詢'廢棄'10,000,000個非活動行。

希望我正確地解釋自己。

基本上我問的是如果活動行數保持不變,查詢總是花費相同的時間,因爲我沒有真正'看着'不活躍。

+0

如果你的表變得更大(讀幾個milllons),你可能想要閱讀關於分區http://dev.mysql.com/doc/refman/5.7/en/partitioning.html的內容。我建議在這裏使用列表,因爲與INSERT,UPDATE和DELETE查詢相比,它具有更少的開銷與線性哈希計算 –

回答

0

這將取決於確切的數據庫引擎,更重要的是您選擇的索引(和索引類型)。

舉例來說,如果一個位圖索引可用時,它可能會因

1

假設您的標誌沒有索引的數據庫數據等傳播給更多或更少的性能已別無選擇,只能掃描每行和檢查狀態。它將不會對您應用的測試產生重大影響,因此查詢需要花費相同的時間。

如果你已經爲你的標誌建立了索引,那麼數據庫將決定是使用索引,還是根據自己關於系統性能的統計信息做一次表掃描,以及它對可能選擇的行數做出的估計。它會選擇它認爲是最快的方法。確切的查詢(主動或非主動)可能會有所作爲,但這不太可能有意義。