爲什麼select * from table
的性能不如select col_1,col_2 from table
?據我所知,這是行佔用時間的位置,而不是返回多少列。oracle中select * vs select colname的性能
回答
選擇不必要的列可能會導致查詢計劃更改對性能產生巨大影響。例如,如果col_1, col2
上有一個索引,但表中還有其他列,則select *
查詢必須執行全表掃描,而select col_1, col_2
查詢可以簡單地掃描可能更小的索引,因此很多查詢成本較低。如果您開始處理涉及多個表的查詢或涉及查詢的查詢,則選擇列的子集有時也可以通過允許Oracle消除不必要的連接或功能評估來更改查詢計劃。現在,公平地說,查詢計劃將根據所選列進行更改並不常見,但如果這樣做,更改通常很重要。
如果您從數據庫外的應用程序發出SQL語句,則選擇其他列會強制Oracle通過網絡發送其他數據,這樣您的應用程序將花費更多時間等待網絡I/O發送數據不感興趣,這可能是非常低效的,特別是如果你的應用程序被部署在WAN上。
選擇不必要的列也可以強制Oracle在不更改計劃的情況下執行額外的I/O。例如,如果您不需要的表格中的某一列是LOB
,則Oracle必須執行額外的工作才能獲取LOB
數據。如果數據存儲在磁盤上的鏈接塊中,但您感興趣的列恰好位於第一行中,則Oracle不必爲指定列的子集的查詢獲取額外的行塊。另一方面,執行select *
的查詢必須提取每一行。
當然,這是在考慮維護方面之前。如果您正在編寫PL/SQL之外的應用程序,那麼執行SELECT *
意味着在將來有人向表中添加新列時代碼會中斷,或者您的應用程序必須在運行時動態確定一組列被返回以自動適應新列。雖然這當然是可行的,但它很可能導致代碼更復雜,因此更難以調試和維護。如果您正在編寫PL/SQL並將數據提取到%ROWTYPE
變量中,那麼在生產代碼中執行SELECT *
可能是完全合理的;在其他語言中,如果您執行SELECT *
,則通常會設置自己的維護噩夢。
+ +1爲了將大局置入考慮範圍......即,將數據發送到Oracle外的應用程序 – Victor 2012-08-10 16:27:57
當您執行SELECT *時,存在從數據字典中爲表查找定義的問題。
當您需要的唯一列是col_1和col_2時,還有一個問題是數據庫要做的工作多一點。對於大型表格,這尤其是個問題。
而且存在網絡帶寬被大於所需數據集所吞噬的問題。
這不是做SELECT *的最佳做法。 它也使嵌入式SQL代碼難以閱讀。
在(hard?)解析時間,Oracle需要在數據字典中查找「select *」還是「select col_1,col2」。不查看數據字典,Oracle不會知道col_1和col_2是否是表,函數等中的列。也不知道行的哪裏查找它們,數據類型等。 – 2012-08-09 23:32:38
- 1. SELECT * VS SELECT * LIMIT(性能)
- 2. UPDATE VS COUNT VS SELECT性能
- 3. SELECT * vs SELECT *
- 4. MySQL和ORACLE性能 - SELECT +檢索行+ DELETE與DELETE WHERE SELECT FROM
- 5. DataTable Select vs List <T> LINQ性能
- 6. Redis SELECT性能
- 7. SELECT COUNT(*)性能
- 8. 與select的性能
- 9. MySQL SELECT 1 vs SELECT`field_id` AND COUNT 1 vs COUNT(*)or COUNT(`field_id`)性能明智
- 10. SELECT RADIANS(47)vs SELECT RADIANS(47.0)
- 11. select vs distinct vs uniq?
- 12. Select語句性能
- 13. Oracle SELECT 1
- 14. epoll VS select
- 15. Oracle遞歸SELECT
- 16. Oracle SQL Select
- 17. Oracle Select Query
- 18. MySQL性能:... IN(SELECT ...)vs IN('12','18',30'...)vs Temporary Table
- 19. select子句中的子查詢vs應用操作員性能
- 20. ORACLE INSERT QUERY中的SELECT QUERY
- 21. oracle中的select語句
- 22. Oracle SQL Select中的行數?
- 23. Oracle中的SELECT IDENT_CURRENT('tablename')
- 24. 創建爲oracle中的select
- 25. SELECT語句的性能
- 26. SQL SELECT條件的性能
- 27. 性能的選擇SELECT
- 28. 在Oracle中檢索Oracle中的select count(*)
- 29. INSERT INTO VS SELECT INTO
- 30. select top 1 * vs select top 1 1
請參閱[*此*](http://stackoverflow.com/questions/3180375/select-vs-select-column) – alfasin 2012-08-09 22:49:22
您是指僅有兩列的表格嗎? – 2012-08-10 00:45:02