mysql

##SQL優化

業務型優化:
多表連接拆分爲單表
分表:取決表的業務是否支持水平拆分、表的大小、表的訪問量(QPS+TPS)
分庫:表的大小、分表的梳理、表的總訪問量(QPS+TPS)
數據庫拆分

技術型優化
在原SQL基礎上,修改索引
改造SQL結構
增加表冗餘字

優化SQL步驟:
分析現有業務指標和sql執行計劃。
改寫sql寫法或者調整索引。
反覆執行這兩部。

將where子句中查詢字段建立複合索引,並且將最簡單的字段放到複合索引最左邊。
將子查詢改爲Join連接查詢。
儘量避免使用in、like查詢,否則可能不會使用索引。
在where子句儘量避免使用IS NULL,!=判斷,否則不會使用索引
避免使用select * 查詢,儘量指定必需返回的字段。這樣查詢更快。

##索引結構

1.聚集索引和非聚集索引
mysql的表是聚集索引組織表,聚集規則是:有主鍵則定義主鍵索引爲聚集索引;沒有主鍵則選第一個不允許爲NULL的唯一索引;還沒有就使用innodb的內置rowid爲聚集索引。
非聚集索引也稱爲二級索引,或者輔助索引。
mysql的索引無論是聚集索引還是非聚集索引,都是B+樹結構。聚集索引的葉子節點存放的是數據,非聚集索引的葉子節點存放的是非聚集索引的key和主鍵值。B+樹的高度爲索引的高度。

2.索引的高度
聚集索引的高度決定了根據主鍵取數據的理論IO次數。根據非聚集索引讀取數據的理論IO次數還要加上訪問聚集索引的IO次數總和。實際上可能要不了這麼多IO。因爲索引的分支節點所在的Page因爲多次讀取會在mysql內存裏cache住。
mysql的一個block大小默認是16K,可以根據索引列的長度粗略估算索引的高度。

   1.事務四特性
原子性(Atomicity)
一致性(Consistent)
隔離性(Isolation)
持久性(Durable)
   2.事務隔離性
讀未提交(Read Uncommitted)
讀已提交(Read Committed)
可重複讀(Repeatable Read)
可串行化(Serializable)
   3.事務問題
更新丟失
髒讀
不可重複讀
幻讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章