我在面試中被問及如何花費大量時間來執行時可以用來優化查詢Select * from TableA
的方法。 (TableA)可以是任何具有大量數據的表。面試官沒有給我任何選擇,例如選擇幾欄或使用「WHERE」條款,而是他希望我爲主題查詢提供解決方案。優化查詢「從表格A中選擇*」
1
A
回答
10
真的很難知道面試官在找什麼。
他們有可能在相對缺乏經驗和預期的一樣的答案:
- !「列表中的所有列,而不是*,因爲這是更快的方式」;或者,
- 「添加一個ORDER BY,因爲這會始終加快速度!」
的各種事情有經驗的人可能會尋找有:
- 檢查查詢計劃,是否有采取額外的資源,計算列或其他類似的東西?
- 重新審視需求 - 用戶是否真的需要整個表以任意順序?
- 表上是否有聚集索引;如果沒有,是堆滿轉發指針的堆?
- 基礎表(和/或用於滿足查詢的索引)是否存在過多的碎片?
- 是查詢被阻止?
- 查詢在等什麼?
- 是等待外部資源(例如蹩腳的I/O子系統,內存授予,tempdb自動增長)的查詢?
- 是查詢並行和痛苦的數據包等待,因爲統計過時了嗎?
有很多的潛在的東西,可能使該查詢慢或,可能使該查詢一個不錯的選擇。
+0
謝謝Aaron,您提供了關於該問題的更深入的見解。問題似乎是不恰當的,因爲存在潛在的機制,正如您所強調的那樣,這可能會使查詢運行緩慢。 –
0
實際上,一些數據庫將優化命令,重建數據庫表以減少碎片 - 這種方式實際上可以提高此類查詢的性能。
PostgreSQL和SQLite的有命令
VACUUM;
MySQL和Oracle有一個命令
OPTIMIZE TABLE table;
它是昂貴的,因爲它會圍繞着大量的數據移動。但是這樣做會使頁面更加平衡,並且這種方式通常會縮小整個數據庫的大小(但有些數據庫可能決定在此時添加索引,因此它也可能會增長)。
由於數據存儲在頁面中,通過重建數據庫來減少頁面數量,即使對於SELECT * FROM table;
語句,也可以提高性能。
相關問題
- 1. 選擇查詢優化
- 2. 優化選擇查詢
- 3. SQL查詢選擇優化
- 4. Oracle選擇查詢優化
- 5. 選擇最優化查詢
- 6. 優化選擇查詢(內選擇+組)
- 7. 優化查詢:選擇在選擇
- 8. 優化從具有百萬行的表中選擇查詢
- 9. 用於從表中選擇特定列的SQL查詢優化
- 10. 優化對巨大表格的選擇查詢?
- 11. 聯合選擇SQL查詢優化
- 12. 如何優化此選擇查詢? (MySQL)
- 13. 優化查詢選擇一段
- 14. MySql的選擇查詢優化
- 15. 含內優化選擇查詢加入
- 16. 休眠選擇查詢優化
- 17. 需要優化的選擇查詢
- 18. 優化慢,索引選擇MySQL查詢
- 19. 優化計數並選擇查詢
- 20. 如何優化此SQL選擇查詢?
- 21. Mysql子選擇查詢優化
- 22. Rails 3:ActiveRecord選擇查詢優化
- 23. 優化查詢選擇元件的mysql
- 24. 優化慢MySQL選擇查詢
- 25. MYSQL - 索引和優化選擇查詢
- 26. 使用嵌套選擇優化查詢
- 27. 使用子選擇優化查詢
- 28. 優化選擇案例查詢
- 29. 從表中優化選擇計數(*)
- 30. 從子查詢中選擇優化的隨機結果
你有沒有想過面試官說什麼? –
索引,過濾器和鍵哦,我的! – Limey
在某些時候,我想可能是他嘲笑我,我無法得出任何解決方案,這就是爲什麼我在這裏。 –