高手問答第 303 期 —— 如何寫出高質量 SQL?

小白兔愛吃大灰狼 發布于 07/25 11:49
閱讀 10K+
收藏 7

從數據到大模型應用,11 月 25 日,杭州源創會,共享開發小技巧

許多 DBA、開發者在寫 SQL 語句時,只追求是否能查得到,而忽略了查詢的性能。然而,在海量數據環境下,一條 SQL 查詢可能會給數據庫帶來巨大的性能壓力。再多的服務器和內存,也會被慢查詢拖垮。

這類 SQL 的問題發現的越早,帶來的影響也就越小。所以,對 SQL 質量關注,無論是 DBA 還是開發者,都需要掌握 SQL 調優的技巧。一條高質量 SQL,能讓系統訪問數據庫更流暢,保障用戶體驗和產品形象。

OSCHINA 本期高手問答(7 月 27 日 - 8 月 2 日),我們將與開發者圍繞著 SQL 優化、SQL 質量保證等話題展開討論。

可討論的問題包括但不限于以下幾個方面:
  • 你會在開發階段優化 SQL 么?
  • 你會關注數據庫的性能么?
  • 你所在公司內部是否有嚴格的 SQL 審核流程,有哪些特點?或槽點?
  • 近期你是否開始使用工具提高 SQL 質量?

如果你也想對 SQL 規范和 SQL 質量有更深的認知,那就不要錯過本次活動,踴躍提問!讓我們將 SQL 隱患消滅在萌芽之中!

嘉賓介紹

愛可生 研發工程師

SQL 質量審核工具 SQLE(開源)負責人

為了鼓勵踴躍提問,@愛可生開源社區 會在問答結束后從提問者中抽取 5 名幸運會員贈予《高性能的 MySQL(第四版)》一本。

OSChina 高手問答一貫的風格,不歡迎任何與主題無關的討論和噴子。

下面歡迎大家就 如何寫出高質量 SQL 相關問題向 @愛可生研發工程師 提問,直接回帖提問即可。

加載中
0
小白兔愛吃大灰狼
小白兔愛吃大灰狼

高手問答第 303 期 —— 如何寫出高質量 SQL?

@鈦元素  @young7  @Hector_T  @enable-  @赤腳小子

恭喜以上5位網友分別獲得《高性能的 MySQL(第四版)》一本。。

請于8月10日前登陸賬號, 私信  @小白兔愛吃大灰狼   告知快遞信息(格式:姓名+電話+地址),過期視為自動放棄哦~

5
clearsky1991
clearsky1991

@愛可生開源社區 你好,我有一點點想法想和您請教:

1. 我們總是提sql優化,可以具體分享一些這方面的具體經驗以及最佳實踐么

2. 近些年nosql的發展對經典的sql有哪些啟示或影響,未來你覺得sql會有一些什么變化

3. 都有一些什么什么工具可以在哪些方面提高sql質量,原理是什么?

RTFSC2
RTFSC2
關于第三點,我提一點,個人觀點就是一個詞“代價”,sql執行是有代價的,sql優化的本質就是減少代價,比如說函數執行要時間代價,排序要代價。而資源是優先的,不管是cpu還是內存,我們優化sql就是用最小的代價實現我們的需求,如索引為什么是最重要的,索引可以避免無效的數據掃描,有排序性,這都是現成的。而sql優化到什么地步呢,個人觀點就是有一個檢索性不錯的條件就基本ok了,沒必要做的太極線
3
鈦元素
鈦元素

@愛可生開源社區 您好!請問企業業務系統當中,有一些比較緩慢的查詢,但是又沒有直接看到sql,就算是使用跟蹤器跟蹤,也無法直接對sql進行優化。比如某些OA系統,在多表聯合查詢的時候,查詢結果的展現非常慢,還不如手寫的sql(在sql查詢工具中)。這種情況怎么辦呢?另一個比較疑惑的問題就是,在開發業務系統的時候,通過ORM方式比較好,還是業務流程放在存儲過程中比較好?最后就是mysql8里面的內存數據庫,是否可以做為日常使用,這樣速度會不會有非常大的提升?安全性如何?謝謝!

愛可生開源社區
愛可生開源社區
1. 這種情況就非常復雜了具體問題具體分析吧,你說的界面慢在業務SQL,網絡,數據庫配置,索引,主機性能上都有可能影響查詢,需要逐步排查的。 2. 沒有特殊需求,數據庫層的業務邏輯還是建議優先放在應用內,避免跟數據庫耦合,不需要進行存儲過程和應用之間的版本控制,減少復雜度。 3. 最后用不用MySQL Memory 看業務場景吧,我沒啥好的建議,可能得你自己調研下方案,確認是否滿足需求。
3
iman123
iman123

@愛可生開源社區 你好,我有幾個問題想請教一下您

1. 最近看到一些使用其他技術例如類庫或框架來代替sql的,這類方案是否是未來的趨勢,當前sql面臨的最大挑戰/問題是什么;

2. 面對多種多樣的數據庫,sql優化是否需要針對某一個具體的數據庫進行專門的優化,亦或者是否有一些全局優化的方法、經驗;

3. 目前市面上的一些管理數據庫schema的版本控制工具有哪些推薦的,有沒有一些最佳實踐經驗可以分享一下;

謝謝 :)

2
赤腳小子
赤腳小子

@愛可生開源社區  你好,請問你對現在的開源sql審計平臺怎么看?有在使用的開源審計平臺么?

審計平臺是否已經可以代替人工審核了呢?如果是那開發人員是不是就不需要精通sql了?如果不是那么審計平臺欠缺的能力有哪些呢?

愛可生開源社區
愛可生開源社區
現有的開源SQL審核(你提到的審計)產品還是很多的,怎么看的話也不能一概而論,不同的公司有不同的訴求??梢匀ithub搜一下”SQL 審核",有很多同類型產品,可以去試試體驗下。然后,SQL審核類產品最重要的點是幫你把SQL規范自動化落地,并不代表沒有SQL審核產品就沒有SQL規范,它只是減少了你審核的成本,能做到流程的規范。對于開發而言精通SQL是必備的技能。
2
e
ericyan1

@愛可生開源社區
sql  是怎么進行版本控制呢,有好一些的開源平臺分享嗎 ?

愛可生開源社區
愛可生開源社區
Flyway,Liquibase 都ok,另外也有一些國產平臺可以github搜一下
2
Li_Peng
Li_Peng

@愛可生開源社區 您好,請教2個問題:

1、對于復雜SQL一般如何做檢查和審計,有沒有推薦的方法或工具軟件?

2、對于使用ChatGPT等AI方式生成SQL、對SQL進行分析和優化,您覺得這是短期的熱點行為,還是會變成一種常態化的工作方法呢?

愛可生開源社區
愛可生開源社區
SQL 審核類開源產品非常多的,github 搜一下就可以了;AI 生成 SQL 或 AI SQL 優化這個目前看確實可以解放部分生產力,市面上也有不少該類產品出現,至少是一個趨勢,以后可能會成為 SQL 類工具必備的輔助技能,常態化的話還為時尚早。
2
enable-
enable-

@愛可生開源社區  有幾個問題請教一下

  1. 如何看待現如今某些sql類工具上集成了AIGC (自然語言轉SQL/SQL解釋/SQL優化/SQL轉換)提高了人員工作效率
  2. 能不能介紹一下 目前主流的 非人工SQL審核流程是個什么樣子的,類似自動SQL診斷優化引擎核心,的一個大概的實現流程是什么樣的(基于規則方式和基于代價模型)
  3. 數據庫Schema版本管理,有沒有什么好的辦法嗎 我們后端用的(Flyway/Liquibase)
  4. 目前公司每次分析 sql性能都是 EXPLAIN show profile 之類的,有什么需要特別注意的點 或者 需要重點留意的地方
愛可生開源社區
愛可生開源社區
3. 一般就是你提的這些產品,一般許多公司的實施方案是要實現版本控制與工單流打通實現自動化審核審批上線等 4. 這個沒啥好的建議,具體問題具體分析吧,除非是說這個不能滿足你的需求
愛可生開源社區
愛可生開源社區
1. 這絕對算是件好事,但對技術人員的要求并不會降低,還是得要具備一定的信息甄別能力,了解SQL優化等的原理; 2. 一般的流程無非就是事前事中事后等不同階段引入審核流程,開發階段的代碼靜態SQL掃描,生成變更時SQL上線階段的規范把關,數據庫運行時的監控巡檢等;
2
young7
young7

@愛可生開源社區

您好,請教以下幾個問題:

  1. 如何系統地學習SQL,有相的書籍推薦嗎?
  2. SQL只是一個規范,并沒有限制具體實現,因此同一個SQL語句在不同數據庫上的實現是有差異的。所以在評估SQL性能的時候,有沒有一些方法或者原則,能夠在SQL語法的層面進行,無需理會具體實現?
  3. 能否介紹下SQL語句性能評估的通用原則/流程?
zjgadministrator
zjgadministrator
回復 @Hector_T : 同感
zjgadministrator
zjgadministrator
回復 @Hector_T : 同感
愛可生開源社區
愛可生開源社區
上面這會同學的回復的很不錯,我補充幾點吧,對于大部分底層程序員來說 CRUD 才是常態,SQL 原理,性能優化還是得了解的。另外也可以了解一些國產數據庫 OceanBase,TiDB 等。
Hector_T
Hector_T
現在軟件發展的開發,越來越弱化數據庫的重要性,很多時候性能問題也不由優化SQL來保證,因為所謂優化SQL能夠優化的空間是有限的,關系型數據庫存在自身的瓶頸,實踐中發現,性能的根本還是取決于整體數據結構和系統架構的設計,而不是SQL的優化,而且現在對于大量數據和并發量有更多的設計和架構思路,同時也伴隨著大量對應的工具,SQL已經逐漸變成最無關緊要的一環了。
Hector_T
Hector_T
更推薦看一些看一些數據庫機制剖析的書籍,比如《ORACLE編程藝術》之類的書,以及一些DBA管理方面的書,比如集群的架設、數據庫存儲、檢索、通信原理之類的。 至于SQL語句性能評估,每種數據庫都有自己的查詢跟蹤手段,通過這些即可評估SQL性能,不過你要首先理解這個數據庫本身的特性。
下一頁
0
愛可生開源社區
愛可生開源社區

感謝大家的熱心參與,當天的問題最晚會在第二天上午 10:30 之前逐一解答。

OSCHINA
登錄后可查看更多優質內容
返回頂部
頂部
一本久久综合亚洲鲁鲁五月天,无翼乌口工全彩无遮挡H全彩,英语老师解开裙子坐我腿中间