mysql i優化 MySQL優化i

2021-10-18 20:43:20 字數 2617 閱讀 4308

一、增刪改優化

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...