Mysql資料庫知識點

2021-08-17 20:26:30 字數 1098 閱讀 6740

mvcc:multi-version concurrency control,實現方式每行記錄增加兩個隱藏字段(事務版本號,刪除版本號),每次事務開啟使用同一版本並+1,提交後刪除版本號更新。mvcc原理:

最左字首匹配原則,非常重要的原則,mysql會一直向右匹配直到遇到範圍查詢(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

=和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式

盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示欄位不重複的比例,比例越大我們掃瞄的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大資料面前區分度就是0,那可能有人會問,這個比例有什麼經驗值嗎?使用場景不同,這個值也很難確定,一般需要join的字段我們都要求是0.1以上,即平均1條掃瞄10條記錄

索引列不能參與計算,保持列「乾淨」,比如from_unixtime(create_time) = 』2014-05-29』就不能使用到索引,原因很簡單,b+樹中存的都是資料表中的字段值,但進行檢索時,需要把所有元素都應用函式才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(』2014-05-29』);

盡量的擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可

先執行看看是否真的很慢,注意設定sql_no_cache

where條件單錶查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單錶每個字段分別查詢,看哪個欄位的區分度最高

explain檢視執行計畫,是否與1預期一致(從鎖定記錄較少的表開始查詢)

order by limit 形式的sql語句讓排序的表優先查

了解業務方使用場景

加索引時參照建索引的幾大原則

觀察結果,不符合預期繼續從0分析

sql優化文章:

MYSQL資料庫知識點

唯一索引 unique 測試 建表create table test id int notnull,name varchar 30 unique,phonenumber varchar 20 password varchar 32 primary key id unique key pn phone...

mysql資料庫知識點總結

mysql屬於關係型資料庫,關係型資料庫是指採用了關係模型來組織資料的資料庫,而關係模型就是指二維 模型,所以,關係型資料庫就是由二維表及其之間的聯絡所組成的乙個資料組織。1.mysql資料庫中常用的概念有 1 高併發讀寫效能低 由於 的使用者併發性高,往往是每秒上萬次的讀寫請求,雖然mysql等關...

mysql資料庫知識點5

mysql的事務處理 1 事務就是將一組sql語句放在同一批次內去執行 如果乙個sql語句出錯,則該批次內的所有sql都將被取消執行 2 事物的acid原則 原子性 atomic 一致性 consist 隔離性 isolated 永續性 durable 3 mysql的事務實現方法 start tr...