ANALYZE命令是否有任何缺點(除了略大的db)?如果沒有,爲什麼不默認執行?SQLite:ANALYZE的缺點
1
A
回答
2
還有一個缺點。 ANALYZE結果可能會導致查詢計劃程序忽略您真正想要使用的索引。
例如,假設您有一個帶有布爾列「isSpecial」的表格。大多數行有isSpecial = 0,但有isSpecial = 1的幾個。
當您執行查詢SELECT * FROM MyTable WHERE isSpecial = 1
時,如果沒有ANALYZE數據,查詢計劃程序將假定isSpecial上的索引是好的並將使用它。在這種情況下,它將會是正確的。如果你要做isSpecial = 0,那麼它仍然會使用索引,這將是低效的,所以不要這樣做。
運行ANALYZE後,查詢計劃程序將知道isSpecial只有兩個值,因此索引的選擇性很差。所以它不會使用它,即使在上面的isSpecial = 1的情況下也是如此。爲了知道isSpecial值的分佈非常不均勻,它需要數據,它只在使用SQLITE_ENABLE_STAT4選項進行編譯時收集。這個選項默認情況下是不啓用的,它有一個很大的缺點:它使預編譯語句的查詢計劃取決於它的綁定值,所以sqlite會更頻繁地重新編寫語句。 (可能每次執行時,我都不知道細節)
tl; dr:運行ANALYZE幾乎不可能在布爾字段上使用索引,即使您知道它們會有所幫助。
0
簡答:計算所需的時間可能比節省的時間多。
與索引不同,當添加或更新數據時,ANALYZE統計信息不會自動保持最新。無論何時添加更新的大量數據,您都應該重新運行ANALYZE。
相關問題
- 1. Qt的缺點
- 2. node.js的缺點?
- 3. CouchDB的缺點
- 4. linq2sql的缺點
- 5. plist的缺點?
- 6. 缺點
- 7. 缺點
- 8. 缺點
- 9. Three20的優點和缺點
- 10. smartGWT的缺點和優點
- 11. N2CMS的優點和缺點
- 12. SOAP Pooling的優點/缺點
- 13. StyleCop,優點/缺點
- 14. CouchDB的優缺點
- 15. XCODE4的優缺點?
- 16. CodeSmith的優缺點
- 17. Phonegap的優缺點
- 18. 缺少的節點
- 19. Tomcat的缺點Http11NioProtocol
- 20. BPMN的優缺點?
- 21. PHP - fwrite的缺點?
- 22. READ_COMMITTED_SNAPSHOT的優缺點
- 23. xcode 3.1.2的缺點
- 24. MongoDB的優缺點?
- 25. 缺點PARAMS
- 26. TCP IP缺點
- 27. 缺點ext js
- 28. 缺點鎖定
- 29. 使用LOGO的缺點/缺點是什麼?
- 30. SSIS包:優點 - 缺點
我已經知道了。所以我想這是由程序員決定是否值得的慢插入/快速查詢之間的權衡。 – Muis