.im/post/cbd0
前言
本文主要針對的是關系型數(shù)據(jù)數(shù)據(jù)庫MySql。
先簡單梳理下Mysql的基本概念,然后分創(chuàng)建時和查詢時這兩個階段的優(yōu)化展開。
1 基本概念簡述1.1 邏輯架構
1.2 鎖
數(shù)據(jù)庫通過鎖機制來解決并發(fā)場景-共享鎖(讀鎖)和排他鎖(寫鎖)。讀鎖是不阻塞的,多個客戶端可以在同一時刻讀取同一個資源。寫鎖是排他的sql數(shù)據(jù)庫指令學習,并且會阻塞其他的讀鎖和寫鎖。簡單提下樂觀鎖和悲觀鎖。
要鎖定數(shù)據(jù)需要一定的鎖策略來配合。
但是MySql的存儲引擎的真實實現(xiàn)不是簡單的行級鎖,一般都是實現(xiàn)了多版本并發(fā)控制(MVCC)。MVCC是行級鎖的變種sql數(shù)據(jù)庫指令學習,多數(shù)情況下避免了加鎖操作,開銷更低。MVCC是通過保存數(shù)據(jù)的某個時間點快照實現(xiàn)的。
1.3 事務
事務保證一組原子性的操作,要么全部成功,要么全部失敗。一旦失敗,回滾之前的所有操作。MySql采用自動提交,如果不是顯式的開啟一個事務,則每個查詢都作為一個事務。
隔離級別控制了一個事務中的修改,哪些在事務內(nèi)和事務間是可見的。四種常見的隔離級別:
1.4 存儲引擎
引擎,最重要,使用最廣泛的存儲引擎。被用來設計處理大量短期事務,具有高性能和自動崩潰恢復的特性。
引擎,不支持事務和行級鎖,崩潰后無法安全恢復。
2 創(chuàng)建時優(yōu)化2.1 和數(shù)據(jù)類型優(yōu)化
整數(shù)
,,,Int, 使用的存儲8,16,24,32,64位存儲空間。使用表示不允許負數(shù),可以使正數(shù)的上線提高一倍。
實數(shù)
字符串
時間類型
優(yōu)化建議點
2.2 索引
索引包含一個或多個列的值。MySql只能高效的利用索引的最左前綴列。索引的優(yōu)勢:
B-Tree
使用最多的索引類型。采用B-Tree數(shù)據(jù)結構來存儲數(shù)據(jù)(每個葉子節(jié)點都包含指向下一個葉子節(jié)點的指針,從而方便葉子節(jié)點的遍歷)。B-Tree索引適用于全鍵值,鍵值范圍,鍵前綴查找,支持排序。
B-Tree索引限制:
哈希索引
只有精確匹配索引的所有列,查詢才有效。存儲引擎會對所有的索引列計算一個哈希碼,哈希索引將所有的哈希碼存儲在索引中,并保存指向每個數(shù)據(jù)行的指針。
哈希索引限制:
優(yōu)化建議點
3 查詢時優(yōu)化3.1 查詢質(zhì)量的三個重要指標3.2 查詢優(yōu)化點
SELECT
?id,
?NAME,
?age
WHERE
?student?s1
INNER?JOIN?(
?SELECT
?????id
?FROM
?????student
?ORDER?BY
?????age
?LIMIT?50,5
)?AS?s2?ON?s1.id?=?s2.id
補充內(nèi)容
來自大神-小寶
1.條件中的字段類型和表結構類型不一致,mysql會自動加轉換函數(shù),導致索引作為函數(shù)中的參數(shù)失效。
2.like查詢前面部分未輸入,以%開頭無法命中索引。
3.補充2個5.7版本的新特性:
,就是數(shù)據(jù)庫中這一列由其他列計算而得
CREATE?TABLE?triangle?(sidea?DOUBLE,?sideb?DOUBLE,?area?DOUBLE?AS?(sidea?*?sideb?/?2));
insert?into?triangle(sidea,?sideb)?values(3,?4);
select?*?from?triangle;
+-------+-------+------+
|?sidea?|?sideb?|?area?|
+-------+-------+------+
|???3??????|???4??????|??6?????|
+-------+-------+------+
支持JSON格式數(shù)據(jù),并提供相關內(nèi)置函數(shù)
CREATE?TABLE?json_test?(name?JSON);
INSERT?INTO?json_test?VALUES('{"name1":?"value1",?"name2":?"value2"}');
SELECT?*?FROM?json_test?WHERE?JSON_CONTAINS(name,?'$.name1');
來自JVM專家-達
關注在性能分析中的使用
EXPLAIN?SELECT?settleId?FROM?Settle?WHERE?settleId?=?"3679"
最后給大家分享我寫的SQL兩件套:《SQL基礎知識第二版》和《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。 有需要的讀者可以下載學習,在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復關鍵字:SQL,就行 數(shù)據(jù)前線 ——End——
后臺回復關鍵字:1024,獲取一份精心整理的技術干貨
后臺回復關鍵字:進群,帶你進入高手如云的交流群。
推薦閱讀