大體來說,mysql可以分為server層和儲存引擎層倆部分。
server層包括聯結器,查詢快取,分析器,優化器,執行器等。涵蓋mysql大多數核心服務功能,以及所有的內建函式,所有的跨儲存引擎的功能都在這一層實現,比如儲存過程,觸發器,檢視等。而儲存引擎負責資料的儲存和提取
日誌模組
redo log(重做日誌)和bin log(歸檔日誌)
redo log是innodb引擎特有的;bin log是mysql的server層實現的,所有引擎都可以使用。
redo log是物理日誌,記錄的是「在某個資料頁上做了什麼修改」;bin log是邏輯日誌,記錄的是這個語句的原始邏輯。
redo log是迴圈寫的,空間固定會用完;bin log是可以追加寫入的。「追加寫」是指binlog檔案寫到一定大小後會切換到下乙個,並不會覆蓋以前的日誌。
深入淺出索引篇
索引的三種常見 也比較簡單資料結構:雜湊表,有序陣列和搜尋樹。
如果發現explain的結果預估的rows值跟實際情況差距很大,可以使用analyze table t命令,可以用來重新統計索引資訊。
force index(a),跨過優化器選擇最優索引過程,直接指定使用的索引。
使用字首索引,定義好長度,就可以做到既節省空間,又不用額外增加太多的查詢成本。
當要給字串建立字首索引時,有什麼方法可以確定應該使用多長的字首呢?
首先可以使用下面的語句,算出這列有多少不同的值。
select count(distinct email) as l from susers
然後,依次選取不同長度的字首來看這個值,比如要看4-7個位元組的字首索引,可以使用:
select count(distinct left(email,4)) as l4, count(distinct left(email,5)) as l5 from suser;
資料庫中收縮表空間的方法
如果要收縮乙個表,只delete掉表裡的資料的話,表檔案大小是不會變的,還需要通過alter table命令重建表。
統計表中資料的數量count
基於innodb引擎
首先count()語義,count()是乙個聚合函式,對於返回的結果集,一行行的判斷,如果count函式的引數不是null,累計值就加1,否則不加,最後返回累計值。
所以,count(*),count(id)和count(1)都表示返回滿足條件的結果集的總行數;而count(字段),則表示返回滿足條件的資料行裡面,引數「字段」不為null的總個數。
對於count(主鍵id)來說:innodb引擎會遍歷整張表,把每一行的id值都取出來,返回給server層,server層拿到id後,判斷是不可能為空的,就按行累加。
對於count(1)來說,innodb引擎遍歷整張表,但是不取值,server層對於返回的每一行,放乙個數字「1」進去,判斷是不可能為空的,按行累加。
單看這倆個用法的差別來看,count(1)執行的要比count(id)快,因為從引擎返回id會涉及到解析資料行,以及拷貝字段值的操作。
對於count(字段)來說如果這個欄位是定義為not null的話,一行行的從記錄裡面讀出這個字段,判斷不能為null,按行累加。如果這個字段允許為null ,那麼執行的時候,判斷倒是有可能是null,還要把取出來的值再判斷一下,不是null才累加。
但是count(*)是例外,並不會把全部字段取出來,而是專門做了優化,不取值,查詢出來的肯定不是null,按行累加。
所以按照效率排序的話,count(字段)< count(id)< count(1) < count( * ),所以盡量使用count( *)
QT 學習筆記(摘抄加記錄)
1 setupui this 是由.ui檔案生成的類的建構函式,這個函式的作用是對介面進行初始化,它按照我們在qt設計器裡設計的樣子把窗體畫出來,把我們在qt設計器裡面定義的訊號和槽建立起來。this 是 繼承了qwidget的乙個物件。2 connect 誰,發出了什麼訊號,誰,執行了什麼操作 3...
mysql 備份命令(摘抄)
原 如果您像裝載整個資料庫meet a geek的內容到乙個檔案中,可以使用下面的命令 bin mysqldump p meet a geek meetageek dump file.txt 這個語句也允許您指定乙個表進行dump 備份 匯出 裝載?如果您只是希望把資料庫meet a geek中的表...
悟空傳摘抄筆記
人生最有價值的時刻,不是最後的功成名就,而是對未來正充滿期待與不安之時。有未來是件很開心的事。我願意和大家一起去見證這個未來,見證我們走過的路。成敗,其實並不是最重要的。因為你去追求理想時你就會明白,你很可能不會成功 最關鍵就在於,當你深知這一點時,你還要不要去追求。我沒有答案,也不需要答案。引用我...