如果我在返回所有行的查詢中使用了索引列,那麼使用where子句中的Index列是否有利?如果查詢返回所有行,數據庫索引是否有用?
例如, select * from table1 where Salary> 1;
如果所有員工的工資大於1,那麼在where子句中使用Index列是否有利?
如果數據庫最有可能像上面那樣使用,那麼在插入時索引的開銷會很大?
如果我在返回所有行的查詢中使用了索引列,那麼使用where子句中的Index列是否有利?如果查詢返回所有行,數據庫索引是否有用?
例如, select * from table1 where Salary> 1;
如果所有員工的工資大於1,那麼在where子句中使用Index列是否有利?
如果數據庫最有可能像上面那樣使用,那麼在插入時索引的開銷會很大?
當您執行沒有ORDER BY的完整掃描時,索引無用。 Oracle索引組織表,Postgresl集羣表,MySQL(InnoDB)PRIMARY KEY聚集索引:給予ORDER BY很大的性能。
http://dev.mysql.com/doc/refman/5.1/en/innodb-index-types.html
「是否同時插入如果數據庫是最有可能被上文用來索引一筆大開銷?」 如果索引適合RAM,一切都可以。
如果您的查詢返回所有行,所有列並且沒有排序索引,則根本無法幫助完成此查詢。虛假謂詞總是沒有意義的,總是評價爲真。
問題的形式似乎有點混亂。我不認爲你真的在問使用某個WHERE子句是否有利。當然,如果你想返回Salary> 1的行,那麼指定它是有好處的 - 否則你可能無法得到你期望的結果(數據可能已經改變)!
我認爲你真正想要問的是,這個查詢是否可以比沒有它的索引更好地執行索引。我認爲我們不一定有足夠的信息來回答這個問題。我們不知道您正在使用哪個DBMS,或者如何存儲表格或可能使用哪種類型的索引。例如,如果查詢是對視圖的查詢,並且對視圖進行索引或對其進行索引,則索引可能會對性能產生很大影響。
但是,在查詢中指定SELECT *通常是不好的做法。指定SELECT *表示您將獲得所有列,即使列集已更改。最好只指定那些你需要的列,因爲這樣你就有更好的機會獲得最高效的執行計劃。
我想知道@ iddqd的答案是否正確。
條件,「WHERE Salary
>`」將需要一個索引不是嗎?
MySQL如何知道所有工資都大於1,除非它具有索引或b。)執行全表掃描?
如果你知道一個事實,你將需要執行全表掃描,那麼你可以使用:
IGNORE INDEX ([*index_list*])
注意MySQL不留意上面的指令中的ORDER BY和GROUP BY之前版本5.1.17。
+1爲您的無敵。 – 2012-07-18 01:45:41