Mysql學習筆記 摘抄

2021-10-09 11:24:35 字數 1880 閱讀 4513

大體來說,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中的表...

悟空傳摘抄筆記

人生最有價值的時刻,不是最後的功成名就,而是對未來正充滿期待與不安之時。有未來是件很開心的事。我願意和大家一起去見證這個未來,見證我們走過的路。成敗,其實並不是最重要的。因為你去追求理想時你就會明白,你很可能不會成功 最關鍵就在於,當你深知這一點時,你還要不要去追求。我沒有答案,也不需要答案。引用我...