翻譯|行業資訊|編輯:胡濤|2023-10-30 10:28:38.510|閱讀 100 次
概述:在本文中,我們將探討使用被認為可以接受的各種場景以及可能導致并發癥的情況。歡迎查閱~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
簡寫命令可能是開發階段最方便、最常用的 SQL 語句之一,但這真的是生產環境的最佳實踐嗎?在本文中,我們將探討使用被認為可以接受的各種場景以及可能導致并發癥的情況。我們還將演示如何有效識別帶有星號的 SQL SELECT 語句并快速修復。
SQL 中的命令用于從表中選擇所有列。此命令從子句中指定的表名中獲取每一列的每一行。SELECT *FROM
這是如何使用的基本示例:SELECT *
SELECT * FROM table_name;
雖然該命令對于快速而臟的查詢非常方便,尤其是在開發和測試期間,但由于各種原因(包括性能影響和未來的可維護性),通常不建議將其用于生產使用。
讓我們考慮下面的例子。如果您在生產環境中運行查詢,您將從Users表中提取所有數據,其中可能包括頭像圖片等大型字段。這可能會占用大量資源,消耗大量內存和 CPU。SELECT * FROM Users;
更有效的策略是僅指定實際需要的列,從而減少查詢所需的數據庫資源。例如:
SELECT
FirstName,
LastName,
Email,
Login
FROM Users;
對于頻繁執行的查詢(例如身份驗證中使用的查詢),您可以通過創建覆蓋索引來進一步優化性能。覆蓋索引包含查詢所需的所有字段,這可以顯著加快查詢執行速度。
CREATE NONCLUSTERED INDEX IDX_Users_Covering ON Users
INCLUDE (FirstName, LastName, Email, Login);
SQL Server 的查詢優化器在可能的情況下更喜歡使用覆蓋索引,因為這樣可以避免篩選聚集索引。但是,如果您使用,則現有索引覆蓋所有列的可能性非常低。SELECT *
即使在創建覆蓋整個表的非聚集索引的極端情況下,如果表的大小顯著增長,這樣的索引也會失去效力。因此,使用不僅會導致性能問題,還會破壞索引策略的優勢,使其隨著表的發展而降低效率。SELECT *
當談到 SQL 查詢時,星號 ( *) 的使用經常引發開發人員、數據庫管理員和數據架構師之間的爭論。讓我們問問 ChatGPT-4(OpenAI 開發的人工智能聊天機器人)是否有理由避免使用.SELECT *
我們同意 ChatGPT-4 的觀點,即使用 SELECT ALL 可能會導致漏洞和性能問題。它還會使您的代碼可讀性較差,并且更難以維護。但是,我們還應該提到重復列名的問題。
在 SQL 中使用多個連接表可能會導致重復的列名,從而使應用程序難以解釋結果。例如,以下查詢將生成重復的Customer列:SELECT *
SELECT *
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderHeader AS soh
ON c.CustomerID = soh.CustomerID;
當應用程序嘗試按列名稱解析結果集時,這可能會導致問題。如果您嘗試使用創建臨時表,您將因重復的列名而遇到錯誤:SELECT * INTO
SELECT * INTO TempCustomerOrders
FROM Sales.Customer AS c
INNER JOIN Sales.SalesOrderHeader AS soh
ON c.CustomerID = soh.CustomerID;
以下是我們關于在 SQL Server 中負責任且有效地使用語句的專家建議。SELECT *
何時避免SELECT *
生產代碼:在生產代碼中,您應該顯式指定列名,以防止表結構發生變化時發生意外更改。
性能:檢索所有列通常意味著比僅指定實際需要的列更多的磁盤 I/O、傳輸的數據和更多的內存使用量。
視圖和存儲過程:避免在視圖和存儲過程中使用。對基礎表的更改可能會破壞代碼。SELECT *
連接操作:當您連接多個表時,使用可能會導致列名不明確,并且傳輸的數據量超出必要。SELECT *
應用程序:在與數據庫交互的應用程序代碼中,請始終指定需要使用的列,以避免重大更改和性能下降。
什么時候可以接受SELECT *
臨時查詢:對于快速數據檢查,只要這些查詢不進入生產環境,使用通常就可以了。SELECT *
初始數據探索:當您最初探索新的數據庫或表架構時,可以快速查看表數據。SELECT *
管理腳本:有時,管理或數據遷移腳本可能需要選擇所有列。然而,即使在這種情況下,顯式指定列通常也更安全。
顯式列:始終指定您需要哪些列。
限定列名:連接表時,用表名或別名限定列名以避免歧義。
索引:確保您有適當的索引,以加快實際使用的列的查詢性能。
監視和優化:始終檢查查詢執行計劃并使用 SQL Server Profiler 或擴展事件來捕獲和優化有問題的查詢。
代碼審查:定期審查代碼是否存在可能導致問題的任何情況。SELECT *
關于 dbForge 搜索
dbForge Search是 SQL Server Management Studio 的免費插件,旨在在 SQL Server 中進行高效的數據庫搜索。它簡化了在存儲過程或查詢中定位 SQL 對象、數據甚至特定文本的任務。憑借其用戶友好的界面和強大的功能,dbForge Search 可以幫助開發人員和數據庫管理員快速識別和管理大型復雜 SQL Server 數據庫中的元素。
如何使用 dbForge 搜索查找 SELECT * 語句
在 SQL Server 數據庫中定位語句可能是優化和最佳實踐實施的關鍵步驟。如果您使用 dbForge Search,查找這些語句是一個簡單的過程。操作方法如下:SELECT *
1. 在對象資源管理器中,右鍵單擊要搜索的數據庫。然后選擇“搜索” -> “查找對象”。
2. 在搜索框中,輸入您要使用的搜索短語。在此示例中,我們輸入SELECT *。
注意:在開始搜索之前,請確保清除所有搜索選項。如果您選擇Use WildCards,dbForge Search 將查找數據庫中所有出現的 SELECT 語句。
3. 按Enter或單擊“開始搜索”。
搜索完成后,您可以在 “搜索結果” 網格中看到找到的結果。當您在網格中選擇結果時, 網格下方的預覽 窗口將顯示與所選結果關聯的 DDL 語句。
找到所有包含 的語句后,您可以使用 dbForge SQL Complete(Devart 開發的一個強大的插件)有效地優化它們。dbForge SQL Complete是一種高級 SQL 代碼完成和生產力工具,可與 SQL Server Management Studio (SSMS) 和 Visual Studio 無縫集成。它提供了廣泛的功能來提高 SQL 編碼速度和質量,例如智能代碼完成、代碼片段和查詢優化,幫助開發人員編寫更高效、更具可讀性的 SQL 查詢。SELECT *
如何使用 dbForge SQL Complete 優化查詢SELECT *
要刪除包含 的語句,您可以使用功能。它使用戶只需按Tab鍵即可將星號 (*) 替換為必要的表或視圖列的列表。讓我們看看如何逐步執行此操作。SELECT *
1. 使用 dbForge Search 查找要優化的查詢。
2. 單擊“在對象資源管理器中查找”。 ]
3. 在對象資源管理器中,右鍵單擊所需的數據庫對象并選擇修改。將打開一個新選項卡,允許您對對象進行更改。
4. 將光標置于*in后面,然后按Tab。dbForge SQL Complete 將自動替換為表中以逗號分隔格式的所有列的列表。SELECT **
總之,在 SQL 語句中用顯式列列表替換星號的做法SELECT不僅僅是風格問題,它具有切實的好處。它增強了查詢的可讀性,簡化了調試,并通過減少需要檢索和處理的數據量來潛在地提高性能。
在本文中,我們演示了如何使用 dbForge 產品線中的兩個強大工具來識別和修復語句。這些實用程序使您可以比以往更輕松地優化 SQL 查詢,從而提高性能和可讀性。SELECT *
數據庫管理工具交流群:765665608 歡迎進群交流討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn