2010-03-18 90 views
20

SQL查詢如何工作? 它如何被編譯? 是否首先編譯from子句以查看該表是否存在? 它如何從數據庫中實際檢索數據? 如何以及以什麼格式存儲在數據庫中?SQL查詢如何工作?

我正在使用phpmyadmin,有沒有什麼辦法可以窺探數據存儲的文件? 我正在使用MySQL

+9

這是一個很大的問題! – 2010-03-18 07:47:48

+0

本身並不是一個答案,但這是它在Oracle中的高級別工作方式。 http://www.idevelopment.info/data/Oracle/DBA_tips/Tuning/TUNING_10.shtml – JavaRocky 2010-03-18 07:57:25

+0

你能提供你打算的特定產品嗎? SQL Server,MySQL,Oracle等? – 2010-03-18 08:02:17

回答

10

嗯......

  • 首先,你必須進行語法檢查,其次是一個表達式樹的產生 - 在這個階段,你還可以測試元素是否存在與「排隊」(即場確實存在在表內)。這是第一步 - 任何錯誤你都可以告訴提交者變得真實。
  • 然後你有....分析。一個SQL查詢與一個程序的不同之處在於它沒有說如何做某件事情,只是結果是什麼。設置基於邏輯。所以你得到一個查詢分析器(取決於產品不好到很好 - oracle長時間的帽子糟糕,DB2是最敏感的甚至測量光盤速度)來決定如何最好地處理這個結果。這是一個非常複雜的野獸 - 它可能會嘗試幾十或幾百種方法來找到他認爲最快的一種方法(基於成本,基本上是一些統計數據)。
  • 然後執行。

查詢分析器,順便說一句,你看到了巨大的差異。不確定MySQL - SQL Server(微軟)發現它沒有最好的一個(但是其中一個很好),但它確實有很好的可視化工具來顯示查詢計劃,比較分析器的估計值真正的需求(如果他們的表格統計信息太多,可能會關閉,因此分析器THINKS大表格很小)。他們在視覺上表現得很好。

DB2在一段時間內擁有了一個優秀的優化器,我已經說過 - 我們已經說過 - 盤片速度可以用於估算。甲骨文很長一段時間「從左到右」(沒有真正的分析),並採取用戶提供的查詢提示(垃圾方法)。我認爲MySQL一開始也非常原始 - 不確定它現在在哪裏。

數據庫中的表格格式等 - 這真的是你不應該關心的東西。這是記錄(顯然,特別是對於開源數據庫),但爲什麼你應該關心?我已經完成了近15年的SQL工作,從來沒有這樣的需求。這包括在一些領域做相當高端的工作。除非你嘗試建立一個數據庫文件修復工具....它是沒有意義的打擾。

+0

這裏有一些很好的信息。謝謝。 – Learning 2010-03-18 08:08:17

+0

@TomTom謝謝,正如你所說我不需要擔心表格格式,但我真的想知道它出於好奇。如果我要設計一個Db,也許我會將我的表存儲在csvs中,並且會說strictfg處理來檢索數據,但我只是想知道別人怎麼做? – 2010-03-18 08:33:43

+0

絕對不是那樣;)真的 - CSV是可笑的低效率。 SQL Server(我唯一知道的細節)使用8kb頁面中的一個文件,它具有自己的管理結構來定義頁面包含的內容。有索引頁面,數據頁面等等,爲了達到SOMEHOW的效率,它確實很複雜 - 一個CSV文件將會非常低效。 – TomTom 2010-03-18 08:41:59

1

如果您的目標產品是SQL Server,那麼this article是一個很好的開始。

+0

@感謝您的關注! – 2010-03-18 08:34:01