MySQL日誌及索引

2022-08-16 13:15:14 字數 2665 閱讀 8785

mysql物理結構:

mysql它是通過檔案系統對資料進行儲存和管理,從物理結構上分為日誌檔案和資料檔案

日誌檔案:

錯誤日誌(err log):

預設是開啟狀態的,如果是5.5.7版本以後的是無法關閉錯誤日誌,錯誤日誌它記錄了執行過程中遇到的所有嚴重的錯誤資訊,以及mysql每次啟動和關閉的詳細資訊。

預設的錯誤日誌名稱:hostname.err

錯誤日誌所記錄的資訊我們可以通過log-error和log-warnings來定義,

其中log-err是定義是否啟用錯誤日誌的功能和錯誤日誌的儲存位置,log-warnings是定義是否將警告資訊也定義至錯誤日誌中。

log_error可以直接定義為檔案路徑,也可以為on|off;log_warings只能使用1|0來定義開關啟動

二進位制日誌(bin log):

預設是關閉狀態,我們需要通過:log-bin=mysql-bin進行開啟,

其中mysql-bin是bin-log日誌檔案的basename,bin-log日誌檔案的預設名稱:mysql-bin-000001.log

bin-log它記錄了資料庫中所有的ddl語句和dml語句,

但不包括select語句內容,語句以事件的形式儲存,描述了資料的變更順序,binlog還包括了每個更新語句的執行時間資訊,binl-og主要作用是用於恢復資料,因此bin-log對於災難恢復和備份恢復來說至關重要。

如果是ddl語句則直接記錄到bin-log日誌,而dml語句必需通過事務提交才能記錄到bin-log日誌中

bin-log還可以用於mysql的主從複製

主從複製原理:

通用查詢日誌(general query log):

預設是關閉的,由於通用查詢日誌會記錄使用者的所有操作,其中還包含增刪查改等資訊,在併發操作大的環境下會產生大量的資訊從而導致不必要的磁碟io,會影響mysql的效能的。如若不是為了除錯資料庫的目的建議不要開啟查詢日誌。

慢查詢日誌(slow query log):

預設是關閉的,需要通過設定:slow_query_log=on進行開啟。

記錄執行時間超過long_query_time秒的所有查詢,便於收集查詢時間比較長的sql語句

mysql索引:

我們使用索引的目的就是在於:優化查詢速度,索引是一種特殊的檔案或者叫資料結構(innodb資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。

索引是在儲存引擎中實現的,不同的儲存引擎就會使用不同的索引,預設是使用btree索引,

索引的分類:

單列索引 (常用)

普通索引:mysql中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點。

唯一索引:索引列中的值必須是唯一的,但是允許為空值,

主鍵索引:是一種特殊的唯一索引,不允許有空值。

組合索引(常用):

在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合

全文索引:

全文索引,只有在myisam引擎上才能使用,只能在char,varchar,text型別欄位上使用全文索引。

索引的使用:

建立索引:

1.createindex索引名 on表名(列名(長度))

刪除索引:

dropindex索引名 on表名

檢視執行計畫:

只需在sql語句前加 explain 

索引的儲存結構:

Mysql日誌和索引

mysql 兩階段提交的不同瞬間,mysql 發生異常重啟,是怎麼保證資料完整性的 時刻a binlog沒寫,不會傳到備庫里,redolog未提交,崩潰恢復的時候事務就會回滾 時刻b 如果redo log 已經由commit標識,直接提交。如果只有完整的prepare,則判斷binlog。binlo...

mysql日誌 MySQL日誌設定及檢視方法詳解

我們都很熟悉mysql日誌,本文主要介紹了mysql日誌設定及檢視方法,需要的朋友可以參考下,希望能幫助到大家。mysql有以下幾種日誌 錯誤日誌 log err 查詢日誌 log 慢查詢日誌 log slow queries 更新日誌 log update 二進位制日誌 log bin 預設情況下...

Mysql 索引及優化

索引是什麼?相信大家都用過字典。你是怎麼從厚厚的新華字典中找到你需要找到的那個字的呢?又是怎麼從一本書中快速定位到你需要的章節?我們都是通過書中的目錄,然後根據目錄中的頁碼定位到我們要的資訊。同樣在mysql中也是這樣為我們準備了乙份目錄。當你去通過sql語句查詢的時候用不用索引,以及怎麼用索引。決...