遞歸sql的功率到達MySQL和MariaDB
遞歸式sql是當今許多現代數據庫中最吸引人、最強大、最危險的特性之一,它使用了第一99標準中首次引入的共同表達式(CTE)。中的的第一個實現開始出現在2006-7中,在MySQL 8.0和MariaDB版本10.2.2中出現。
公共表表達式(帶遞歸子句…子句)
遞歸式sql是通過使用共同或CTE實現的,它是一個臨時命名的resultset,它是從一個簡單的查詢派生出來的,並在選擇、插入、更新或刪除語句的執行範圍內定義。CTE通常用於簡化和(或)將代碼轉換為可讀性更強的部分,從而提高了sql代碼的可讀性。中的的一個“特性”是能夠遞歸引用命名的resultset,從而遞歸地引用。
通過遞歸的sql查詢,您可以實現您不可能想象到的在這種類型的sql和它執行的速度上是可能的事情。您可以解決許多類型的業務問題,甚至重寫一些複雜的sql/應用程序邏輯,直到對數據庫進行簡單的recursiveSQL調用。
遞歸CTE的一些有用的用法示例是,您可以使用它來查找數據中的空白,創建組織結構圖並創建測試數據。
我最喜歡的使用遞歸式sql查詢的方法是,根據數據的複雜性和可用的數據庫/係統資源,生成大量的測試數據。使用遞歸CTE,我們可以在非常短的時間內產生數百、數千或數百萬條記錄,然後隻限於可用的數據庫內存和其他數據庫/係統資源。與我所見和經曆的其他測試數據過程相比,遞歸查詢產生的測試數據更快。
此外,已經證明遞歸查詢比其他需要幾天的查詢在數分鍾內執行的查詢要好。
遞歸這個詞說的都是。您有一個查詢,該查詢會反複調用自己的某個起始點,即極其重要a.a終點(A)安全出口就像我說的那樣。如果你沒有一個安全的退出,或者你的遞歸公式超出它,你就陷入了深深的麻煩。您的查詢將進入無限環導致非常高的cpu和非常高的日誌利用率,這將導致內存和/或存儲耗盡。如果你的查詢失控,你必須快速思考並停止它。如果您不能這樣做,那麼立即通知您的DBA,這樣他/她就可以通過殺死runnaway線程來阻止數據庫係統的阻塞。
最後更新:2017-10-23 14:33:48