這個的快取不是指redis,或者mybatis的快取我們常見的快取,其實mysql自帶了快取模組,但是我們幾乎從來沒有用過他,甚至在mysql8.0直接就給去掉了,所以一定有他的侷限性,大家可以查閱一下,但是確實是存在的。如果開啟的話,所以乙個查詢sql先會查詢快取
我們沒有使用快取的話,就會跳過快取的模組,那麼接下來我們就應該通過mysql解析器分析sql的語法與詞法是否合乎規範,並且會按照mysql的語法規則,根據sql語句生成解析樹
當我們解析完成之後,並不知道該sql查詢的表名或者字段是否存在,所以mysql種的預處理器會檢查解析樹表名與列名是否正確,之後得到乙個新的解析樹。
查詢優化器的目的就是根據解析樹生成不同的執行計畫,然後選擇一種最優的執行計畫,mysql 裡面使用的是基於開銷(cost)的優化器,那種執行計畫開銷最小,就用哪種。
得到乙個執行計畫之後,我們的sql語句是不是終於可以執行了,那麼又又有新的問題了,執行計畫是誰,在哪執行,誰去執行?
資料庫中的乙個表,我們可以把他理解成乙個excel電子**的形式,所以我們的表在儲存資料的同時,還要組織資料的儲存結構,這個結構就是我們的儲存引擎決定的。
儲存引擎我們要注意,是表的型別而非資料庫的型別,乙個資料庫當中可以有多種表的儲存引擎
然後我們通過執行儲存引擎 ,獲取資料,返回到客戶端
一條SQL語句研究
現有 select from t where a in 5,3,2,1,8,9,30.假設 a 是主鍵,in裡面的引數是唯一的。現要求輸出的結果集按照 in 提供的引數順序排序。而不是按照a本身的排序規則排序?另 如果不要求使用臨時表或表變數,那麼又有什麼辦法實現。臨時表方案參卡 create ta...
一條sql 語句的優化
第二個版本 一條sql搞定,使用巢狀查詢,費時2 3分鐘 select a.indexid,c.title,c.createdtime,c.intro,d.picurl,e.src,e.size,e.info from mms content index a,mms index node b,mms...
一條分頁的SQL語句
在網頁中如果顯示的資料太多就會佔據過多的頁面,而且顯示速度也會很慢。為了控制每次在頁面上顯示資料的數量,就可以利用分頁來顯示資料。select top pagesize from table where id notin select top prenum id from table order b...