在我的經驗,我已經使用像許多查詢選擇,爲了通過,其中條款等。在MySQL,SQL服務器,甲骨文等 有那麼一刻我已經想好,內部實現數據庫的查詢
1)這是怎麼寫的內部執行上述查詢
2)他們使用哪種語言?
3)是那種編程語言?如果是是哪種語言?
4)來實現這種複雜的數據庫
在我的經驗,我已經使用像許多查詢選擇,爲了通過,其中條款等。在MySQL,SQL服務器,甲骨文等 有那麼一刻我已經想好,內部實現數據庫的查詢
1)這是怎麼寫的內部執行上述查詢
2)他們使用哪種語言?
3)是那種編程語言?如果是是哪種語言?
4)來實現這種複雜的數據庫
1)以示意圖的形式,你將進行如下:
一)在拆分其組件查詢和創建查詢的抽象語法樹(AST)。有些工具可以做到這一點,在過去的日子裏,lex和yacc被用來做這件事,現在有更多的選擇。
b)第一步,優化器將通過應用已知的相等轉換來重新組織樹,以便通過使用索引查詢返回最少結果的查詢,從而減少加入等問題。 ..
c)你可以走這棵樹來實現對數據庫的小操作和返回的數據。通常,這會導致「虛臨時」表中的AST
d)從頂部節點收集東西,它返回給客戶端的節點
2-3),我不認爲有特殊的語言。許多人在C,但也有Java和其他語言中使用過
4)我認爲最好的環境是這種工作的一個安靜的環境。 ;-)
真正的努力不在於SQL解釋器/編譯器,而在於詳細的數據結構和保持一切的有效組織和動態調整以保持數據庫性能的基本原理。
的,我相信甲骨文數據庫管理系統是所有最初用C寫的什麼樣的環境需要,而且很可能仍然是。
在許多(所有?)數據庫中,您可以查看解釋/執行計劃。這會給你一個關於數據庫內正在發生的事情的粗略近似。在商業RDBMS中,最接近你理解優化的工作原理。查詢分析器中的算法是嚴密保密的祕密。
喬昌寫了excellent article about how SQL Server's cost based optimizer works
同樣,你也可以找到有關PostgreSQL和MySQL
類似的信息