縱向優化:字段設計、表庫設計、搜尋引擎、建立索引、sql語句優化(效果最不明顯)
橫向優化:負載均衡(nginx 輪詢、iphash、權重)、讀寫分離、主從複製
表庫優化:
水平分表,比如部落格資料庫的博文本段(text)過大,單獨分一張表來儲存博文
垂直分表,mysql 記錄過多會明顯效能下降,把多條記錄分多張表儲存
在高併發的業務場景下禁止使用外來鍵和級聯更新,一切外來鍵的功能在應用層解決。
級聯更新是強阻塞,存在資料更新風暴的風險,外來鍵會影響資料庫的插入速度,並且使表和表之間耦合,不適合發展分布式 高併發集群。
禁止使用儲存過程,難以除錯和拓展,沒有移植性
ps:以上幾條僅針對高併發業務場景,單機低併發隨意
索引建立:
1、在where、orderby 、join 等用到的字段上建立索引
2、建立索引會影響插入效能,因此頻繁更新的表不要使用索引
3、可以考慮冗餘欄位來 用於建立索引。
4、多表關聯查詢必須保證欄位有索引。
索引型別:
1、普通索引
2、主鍵索引
3、唯一索引
4、組合索引
5、全文索引
索引資料結構:btree(預設)、rtree(少用),fulltext(針對模糊查詢,僅myisam支援),hash(僅對『in』 『=』高效)
搜尋引擎:
讀多寫少用myisam ,比如部落格、新聞(myisam僅僅在讀取效能上稍稍佔優)
讀多寫多用innodb。
兩者區別:
1、innodb 行級鎖,myisam 表級鎖,innodb併發效能遠遠高於myisam。
2、innodb 支援事務、外來鍵,保證資料一致性,完整性。myisam不支援事務、外來鍵。
3、innodb 讀寫阻塞和事務隔離級別相關,myisam讀寫阻塞,讀和寫不能同時進行。
4、innodb支援聚簇索引。資料和索引放在同一表空間。myisam不支援。
5、innodb支援mvcc高併發,myisam不支援。
mvcc多版本併發控制:每條記錄都有隱藏預設字段記錄了建立和刪除的事務編號(時間),根據時間來顯示客戶在查詢時候看到的記錄。
現在資料庫引擎預設都是使用innodb。
其他:禁止左模糊和全模糊,會導致全表掃瞄。
分頁查詢: select 字段 from table limit(pageno -1) * size, size
設定查詢快取
使用explain sql 查詢是否 全表搜尋、是否使用了索引 來進行優化。
主從複製、讀寫分離。
事務:acid特性 :
1、原子性,要麼都做,要麼都不做,如果中間出錯則回滾。
2、一致性,事務開始和結束,資料庫的完整性不被破壞。(主要指的是主鍵約束、外來鍵約束等等)
3、隔離性,多個事務對同一條資料的操作 是序列的,而不是並行的。
4、永續性,事務完成後便被儲存。
髒讀:a執行了修改,但是b在a提交前就讀取了資料,最終a卻回滾了。也就是讀取了想修改卻最終沒修改的資料
不可重複讀:a 在一次事務中多次讀取某一資料,但b在過程中更新了那一資料,導致a的多次讀取資料不一致。
幻讀:幻讀和不可重複讀類似,但幻讀重在記錄的新增和刪除上,而不可重複讀的表現是一條記錄前後不一致。比如a 把所有學生的成績設定為0,過程中b插入了一條新學生資料,那麼這一條就沒有被更新到,就是幻讀。
事務隔離級別:1、序列化serializable 最安全,也最低效。不會出現髒讀、幻讀、不可重複讀。
2、可重複讀 repeatable-read ,可能出現幻讀
3、提交讀 read-commited 可能出現幻讀、不可重複讀
4、未提交讀 read-uncommitted 可能出現幻讀、不可重複讀、髒讀。
mysql資料庫優化索引 mysql資料庫索引調優
一 mysql索引 1 磁碟檔案結構 innodb引擎 frm格式檔案儲存表結構,ibd格式檔案儲存索引和資料。myisam引擎 frm格式檔案儲存表結構,myi格式檔案儲存索引,myd格式檔案儲存資料 2 mysql資料庫資料範問原理 innodb btree 1 ibd檔案中主鍵構建b tree...
mysql資料庫優先 MySQL資料庫優化
1.新增索引 mysql資料庫的四類索引 index 普通索引,資料可以重複,沒有任何限制。unique 唯一索引,要求索引列的值必須唯一,但允許有空值 如果是組合索引,那麼列值的組合必須唯一。primary key 主鍵索引,是一種特殊的唯一索引,乙個表只能有乙個主鍵,不允許有空值,一般是在建立表...
mysql資料庫優化
用到啥學啥,mysql資料庫優化成了這幾天的老大難問題。瘋狂的尋找mysql優化的資料,覺得有用的不少,記錄下跟大家分享,對了,這裡僅僅是mysql資料庫本身的優化,沒有寫磁碟之類的 開始之前,介紹倆mysql的命令 show global status 檢視執行狀態的,顯示執行各種狀態值 show...