優化SQL Server數據邏輯 提高查詢性能

2020-11-23 IT168

  【IT168 技術文檔】

  SQL語句優化的原則:

  1.使用索引來更快地遍歷表

  預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,數據在物理上隨機存放在數據頁上。合理的索引設計要建立在對各種查詢的分析和預測上。一般來說:①.有大量重複值、且經常有範圍查詢(between, > ,< ,> =,< =)和order by、group by發生的列,可考慮建立群集索引;②.經常同時存取多列,且每列都含有重複值可考慮建立組合索引;③.組合索引要儘量使關鍵查詢形成索引覆蓋,其前導列一定是使用最頻繁的列。索引雖有助於提高性能但不是索引越多越好,恰好相反過多的索引會導致系統低效。用戶在表中每加進一個索引,維護索引集合就要做相應的更新工作。

  2.IS NULL 與 IS NOT NULL

  不能用null作索引,任何包含null值的列都將不會被包含在索引中。即使索引有多列這樣的情況下,只要這些列中有一列含有null,該列就會從索引中排除。也就是說如果某列存在空值,即使對該列建索引也不會提高性能。任何在where子句中使用is null或is not null的語句優化器是不允許使用索引的。

  3.IN和EXISTS

  EXISTS要遠比IN的效率高。裡面關係到full table scan和range scan。幾乎將所有的IN操作符子查詢改寫為使用EXISTS的子查詢。

  4.在海量查詢時儘量少用格式轉換。

  5.當在SQL Server 2000中,如果存儲過程只有一個參數,並且是OUTPUT類型的,必須在調用這個存儲過程的時候給這個參數一個初始的值,否則會出現調用錯誤。

  6.ORDER BY和GROPU BY

  使用ORDER BY和GROUP BY短語,任何一種索引都有助於SELECT的性能提高。注意如果索引列裡面有NULL值,Optimizer將無法優化。

  7.任何對列的操作都將導致表掃描,它包括資料庫函數、計算表達式等等,查詢時要儘可能將操作移至等號右邊。

  8.IN、OR子句常會使用工作表,使索引失效。如果不產生大量重複值,可以考慮把子句拆開。拆開的子句中應該包含索引。

  9.SET SHOWPLAN_ALL ON 查看執行方案。DBCC檢查資料庫數據完整性。

  DBCC(DataBase Consistency Checker)是一組用於驗證 SQL Server 資料庫完整性的程序。

  10.慎用遊標

  在某些必須使用遊標的場合,可考慮將符合條件的數據行轉入臨時表中,再對臨時表定義遊標進行操作,這樣可使性能得到明顯提高。

  優化資料庫的方法:

  1.關鍵欄位建立索引。

  2.使用存儲過程,它使SQL變得更加靈活和高效。

  3.備份資料庫和清除垃圾數據。

  4.SQL語句語法的優化。(可以用Sybase的SQL Expert,可惜我沒找到unexpired的

  序列號)

  5.清理刪除日誌。

  總結:

  優化就是WHERE子句利用了索引,不可優化即發生了表掃描或額外開銷。經驗證,SQL Server性能的最大改進得益於邏輯的資料庫設計、

  索引設計和查詢設計方面。反過來說,最大的性能問題常常是由其中這些相同方面中的不足引起的。其實SQL優化的實質就是在結果正確的前提下,用優化器可以識別的語句,充份利用索引,減少表掃描的I/O次數,儘量避免表搜索的發生。其實SQL的性能優化是一個複雜的過程,以上這些只是在應用層次的一種體現,深入研究還會涉及資料庫層的資源配置、網絡層的流量控制以及作業系統層的總體設計。

相關焦點

  • 微軟 SQL Server 2016 SP1 發布
    新的 USE HINT 查詢選項 - 添加了一個新的查詢選項 OPTION(USE HINT('<option>')),以使用下面列出的可支持的查詢級別提示來更改查詢優化程序行為。 支持九種不同的提示,以啟用以前僅通過跟蹤標誌可用的功能。 與 QUERYTRACEON 不同,USE HINT 選項不需要 sysadmin 權限。
  • 關係代數與SQL查詢優化的研究
    1 引言 隨著各個應用領域信息化程度日益提高,資料庫中的數據量迅猛增長,導致資料庫系統的查詢性能下降。但是一個資料庫應用系統的查詢性能直接影響到系統的推廣和應用,因此資料庫系統性能和查詢優化成為資料庫應用領域備受關注的熱點問題。 影響資料庫系統性能的因素很多,包括資料庫連接方式、應用系統架構、資料庫設計、管理等。其中最本質又至關重要的是資料庫管理系統本身的查詢優化技術。
  • SQL Server 首次登陸 Linux 平臺
    近年來, SQL Server 正在一直演化,除了想一改 DMS(資料庫管理系統)的角色,還想介入到數據分析、機器學習和數據科學領域。2017 年 4 月份, SQL Server 發布了一個重要組件,支持在 SQL Server 中用 Python 運行機器學習負載。
  • SQL Server 2016新亮點全揭秘
    【IT168 資訊】微軟即將在6月1號發布的SQL Server 2016可以為數據提供更好的安全性,並且能夠支持混合雲,能夠查詢非結構化的數據源。  很多企業發現在他們的資料庫裡有很大一部分的數據是結構化和非結構化的交織在一起的。在這種情況下,對於數據安全的要求就越來越高。
  • 神奇的 SQL 之性能優化 →讓 SQL 飛起來
    寫在前面在像 Web 服務這樣需要快速響應的應用場景中,SQL 的性能直接決定了系統是否可以使用;特別在一些中小型應用中,SQL 性能更是決定服務能否快速響應的唯一標準嚴格地優化查詢性能時,必須要了解所使用資料庫的功能特點,此外,查詢速度慢並不只是因為 SQL 語句本身,還可能是因為內存分配不佳、文件結構不合理、刷髒頁等其他原因因此本文即將介紹的優化
  • 這個函數讓SQL效率提升99%
    可以在單個查詢中將多個排名或聚合窗口函數與單個 FROM 子句一起使用。窗口函數是整個SQL語句最後被執行的部分,這意味著窗口函數是在SQL查詢的結果集上進行的, 因此不會受到Group By, Having,Where子句的影響。
  • sqltoy-orm-4.16.11 發版,部分功能優化
    的十四個關鍵特點:1、最簡最直觀的sql編寫方式(不僅僅是查詢語句),採用條件參數前置處理規整法,讓sql語句部分跟客戶端保持高度一致2、sql中支持注釋(規避了對hint特性的影響,知道hint嗎?搜oracle hint),和動態更新加載,便於開發和後期維護整個過程的管理3、支持緩存翻譯和反向緩存條件檢索(通過緩存將名稱匹配成精確的key),實現sql簡化和性能大幅提升4、支持快速分頁和分頁優化功能,實現分頁最高級別的優化,同時還考慮到了cte多個with as情況下的優化支持5、支持並行查詢6、根本杜絕sql注入問題,以後不需要討論這個話題7、支持行列轉換
  • 大數據分析工程師入門9-Spark SQL
    Spark SQL是Spark專門用來處理結構化數據的模塊,是Spark的核心組件,在1.0時發布。SparkSQL替代的是HIVE的查詢引擎,HIVE的默認引擎查詢效率低是由於其基於MapReduce實現SQL查詢,而MapReduce的shuffle是基於磁碟的。
  • server sql 作業 使用專題及常見問題 - CSDN
    use masterGO/* --開啟sql server代理sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Agent XPs', 1; GO RECONFIGURE GO*/--定義創建作業
  • SQL Server2008引擎組件和CPU性能監控
    關係引擎(Relational Engine)  關係引擎又成為查詢處理器,包括用來確定某個查詢所要做的操作及進行這些操作最佳方式的SQL Server組件。同時關係引擎也負責向存儲引擎請求數據時查詢的執行,並處理返回的結果。
  • server components——提高頁面性能的新利器
    最近`react`團隊宣布了一個新特性: `server components`目前這個`feature`仍然是實驗性的,目前沒有還沒有正式的文檔。簡單來說`server components`就是在服務端渲染的組件,但是狀態並沒有丟失。
  • 2018年自考資料庫原理知識點:SQL的數據查詢優化
    2.4.1 關係代數表達式的優化問題考核要求:達到「領會」層次知識點:關係代數表達式的優化問題查詢優化的目的就是為了系統在執行時既省時間又能提高效率。在關係代數運算中,通常是先進行笛卡爾積或聯接運算,再進行選擇和投影。笛卡爾積或聯接運算卻往往花費教多的時間。
  • 升級SQL Server 2016,到底值不值?!
    也許SQL Server 2016之所以備受關注,是因為這是自成立以來最劇烈的一次更新,這次更新主要側重於提升安全性、性能和分析能力等。  新版本的SQL Server可以保證SQL 注入的機會更少,同時有更大的存儲和優化數據表能力。顯然,舊版本的SQL Server並沒有利用發揮技術的全部潛力。好吧,這是值得升級的第一大理由。
  • 對SQL Server跨文件組的表進行分區
    實現可調窗口應用場景將數據切換到存檔表。  先決條件  在開始此實驗之前,您必須:  使用 Transact-SQL 在 Microsoft® SQL Server® 資料庫中創建資料庫對象的經驗。
  • SQL Server2008中的9種數據挖掘算法淺析
    【IT168 技術文檔】  在sql server2008中提供了9種常用的數據挖掘算法,這些算法用在不同數據挖掘的應用場景下,下面我們就各個算法逐個分析討論。  1.決策樹算法  決策樹,又稱判定樹,是一種類似二叉樹或多叉樹的樹結構。
  • Spark 3.0發布啦,改進SQL,棄Python 2,增強擴展,性能大幅提升
    在經過了大量優化後,Spark 3.0的性能比Spark 2.4快了大約2倍。Python是目前Spark上使用最廣泛的語言;針對Python語言提供的PySpark在PyPI上的月下載量超過500萬。
  • R+SQL Server的大數據管理
    這是大數據的問題嗎?怎麼那麼不小心就被我碰上了?今天我們就談談「大數據」這個老話題。自2012年以來,大數據(Big Data)已經上過《紐約時報》《華爾街日報》的專欄封面,進入美國白宮官網的新聞,在國內更是被炒得熱火朝天,網際網路、工商業、高校等都紛紛進行探索討論。大數據戰略甚至成為了我們國家「十三五」十四大戰略之一。
  • 詳解SQL Server 2008滑動窗口的管理
    【IT168 技術文檔】每個月都會有新數據添加到龐大的Orders數據表中,此時如果只對這一個表進行操作,則更新索引的過程將嚴重製約性能並產生大量碎片。為了進行優化,我們將通過獨立的兩個表進行配合,即當有新數據產生時,將舊數據從分區表中切換出來,然後將新數據添加到分區表中。
  • SQL-server資料庫管理系統試卷及答案A
    學年第二學期《SQL-server 2000資料庫管理系統》試卷(A)使用班級:A、具有物理獨立性,沒有邏輯獨立性 B、具有物理獨立性和邏輯獨立性C、獨立性差 D、具有高度的物理獨立性和一定程度的邏輯獨立性6、資料庫中只存放視圖的( )。
  • SQL Server 管理常用的SQL和T-SQL
    把一臺伺服器上的資料庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 查看某資料庫下,對象級用戶權限 sp_helprotect 7.查看連結伺服器 sp_helplinkedsrvlogin 查看遠端資料庫用戶登錄信息 sp_helpremotelogin 8.查看某資料庫下某個數據對象的大小 sp_spaceused @objname 還可以用sp_toptables過程看最大的N(默認為50)個表,查看某資料庫下某個數據對象的索引信息: sp_helpindex