一、增刪改優化
1.insert語句
(1)批量插入時,同時插入多條資料(10條時效率最高)
(2)根據業務,考慮使用replace代替insert語句
2.delete語句
(1)truncate刪除速度更快,但truncate刪除後不記錄日誌,不可以恢復資料
(2)如果沒有外來鍵關聯,innodb執行truncate是先drop table,再建立乙個跟原始表一樣的空表,速度遠快於delete逐條刪除行記錄。
(3)表有外來鍵關聯,truncate table刪除資料為逐行刪除,如果外來鍵指定級聯刪除(delete cascade),關聯的字表也會被刪除所有資料。
如果外來鍵未指定級聯(cascde),truncate table逐行刪除資料,如果是父行關聯子表行資料,將會報錯。
3.update語句
(1)避免update建有很多索引的列
(2)避免update在where子句條件中的列
4.replace語句
根據應用情況可以使用replace 語句代替insert/update語句。例如:如果乙個表在乙個欄位上建立了唯一索引,當向這個表中使用已經存在的鍵值插入一條記錄,將會丟擲乙個主鍵衝突的錯誤。如果我們想用新記錄的值來覆蓋原來的記錄值時,就可以使用replace語句。
使用replace插入記錄時,如果記錄不重複(或往表裡插新記錄),replace功能與insert一樣,如果存在重覆記錄,replace就使用新記錄的值來替換原來的記錄值。使用replace的最大好處就是可以將delete和insert合二為一,形成乙個原子操作。這樣就可以不必考慮同時使用delete和insert時新增事務等複雜操作了。
在使用replace時,表中必須有唯一有乙個primary key或unique索引,否則,使用乙個replace語句沒有意義。
二、多表查詢優化
三、索引優化
1.什麼是索引?
索引是一種特殊的檔案(innodb資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。
2.索引優缺點
(1)可以大大加快資料的檢索速度
(2)使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。
(3)索引需要額外的維護成本
(4)索引檔案是單獨存在的檔案,對資料的增刪改操作都會產生額外的對索引檔案的操作,這些操作需要消耗額外的io,會降低增刪改效率
3.索引原理
索引的原理就是把無序的資料變成有序的查詢
(1)把建立了索引的列的內容進行排序
(2)對排序結果生成倒排表
(3)在倒排表內容上拼上資料位址鏈
(4)查詢時,先拿到倒排表內容,再取出資料位址鏈,從而拿到資料
4.索引資料結構(b樹,hash)
(1)b樹索引
所以主鍵索引比普通索引塊
5.建立索引原則
(1)最左字首匹配原則
(2)較為頻繁作為查詢條件的字段才去建立索引
(3)更新頻繁欄位不適合建索引
(4)資料區分度低的列不適合建索引(例如:性別字段)
(5)盡量擴充套件索引,不要新建索引。比如表中已經有a的索引,現在要加(a,b)的索引,那麼只需要修改原來的索引即可
(6)定義外來鍵的資料列一定要建索引
(7)索引盡量選擇資料簡單的列,定義為text、image的列不要建立索引
6.百萬級或以上的資料如何刪除?
刪除資料的速度和建立的索引的數量成正比
(1)刪除百萬資料時,可以先刪除索引
(2)然後刪除資料
(3)刪除完成後重新建立索引
四、表設計及優化
(1)建立規範化表,消除資料冗餘
(2)合適的字段屬性
字段型別盡量使用最小、最簡單的資料型別。數值型別比字串效率高得多
建議不要使用double,不僅僅是儲存長度問題,還存在精度問題
char是固定長度,所以它的處理速度比varchar快得多
盡量不要允許null,除非必要,可以用not null+default代替
text和blob區別:blob儲存二進位制資料,text儲存字元資料,有字符集。blob和text不能有預設值
自增字段要慎用,不利於資料遷移
不要在資料庫中放lob型別資料
盡量字段定義為not null約束
盡量使用timestamp型別,因為其儲存空間只有datetime的一半
(3)表的拆分
3.1垂直拆分(將原來有很多列的表拆分成多張表)
注意:垂直拆分應該在資料表設計之初就執行的步驟,然後查詢的時候用jion關鍵起來即可;
通常我們按以下原則進行垂直拆分:
把不常用的字段單獨放在一張表;
把text,blob等大字段拆分出來放在附表中;
經常組合查詢的列放在一張表中;
缺點也很明顯,需要使用冗餘字段,而且需要join操作。
3.2水平拆分( 如果你發現某個表的記錄太多,例如超過一千萬條,則要對該錶進行水平分割。
水平分割的做法是,以該錶主鍵的某個值為界線,將該錶的記錄水平分割為兩個表。)
(4)三少原則
①:資料庫的表越少越好
②:表的字段越少越好
③:欄位中的組合主鍵、組合索引越少越好
當然這裡的少是相對的,是減少資料冗餘的重要設計理念。
mysql i優化 MySQL優化i
一 增刪改優化 1.insert語句 1 批量插入時,同時插入多條資料 10條時效率最高 2 根據業務,考慮使用replace代替insert語句 2.delete語句 1 truncate刪除速度更快,但truncate刪除後不記錄日誌,不可以恢復資料 2 如果沒有外來鍵關聯,innodb執行tr...
mysql的優化 MySQL優化
一 sql語句優化 1 使用limit對查詢結果的記錄進行限定 2 避免select 將需要查詢的字段列出來 3 使用連線 join 來代替子查詢 4 拆分大的delete或insert語句 二 選擇合適的資料型別 1 使用可存下資料的最小的資料型別,整型 date,time char,varcha...
mysql 隨機優化 mysql 優化
mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化 一 sql優化 1.優化資料型別 盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值 盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間 盡量少用v...