資料庫優化

2021-08-03 22:26:47 字數 3060 閱讀 6764

資料庫表的設計

資料庫優化

資料庫優化涉及方面特別多。

涉及的方面:

表設計比較合理

選擇合適的表引擎

選擇合適的字符集

選擇合適的資料型別

合理新增索引、使用索引

寫sql語句注意問題

硬體問題

頻寬create table user(id int not null)

1. 操作頻繁的表中只要保留一些常用的字段,並且一張表的字段不宜過多。

2. 設計表要遵守三正規化,但是不能嚴格遵守三正規化,有些時候需要反正規化

要根據表的特點,來選擇表引擎。

假設乙個表寫操作多,應該innodb

在mysql5.6之後版本,建議都選擇innodb引擎

不同字符集支援不同語言,拉丁字符集是不支援中文。utf8字符集支援語言比較廣。

1、 一般選擇utf8, 但是如果表需要存放emoji表情到資料庫,那麼應該選擇utf8mb4

1、 選擇最小的資料型別,但是考慮擴充套件性

2、 能夠使用數字型別,盡量不要其他型別

3、 盡量少用文字型別

4、 時間盡量使用時間型別存放,不用使用int存放

1. 建議給每個欄位都新增not null
整數型別

tinyint(n) 占用1位元組,表示範圍(有符號): -128 ~ 127 無符號: 0-256

int 占用4個位元組,表示範圍(有符號):-21億 ~ 21 億 無符號:0 ~ 42億

bigint 占用8個位元組

字串型別

varchar(n) 可變長度,n表示字元數。n最大超過255字元

varchar(2) 存'ab',占用3個位元組,當n小於255時候,需要1個位元組存放長度

varchar(300) 存'ab',占用4個位元組,當n大於255時候,需要2個位元組存放長度

char(n) 固定長度,n表示字元數,n最大255,

char(2) 存放'ab',占用2個位元組,如果存'abc',只有'ab'

時間型別

date 占用3個位元組,表示年月日。 這個data特別存放生日。

timestamp 占用4個位元組,當乙個欄位是timestamp型別,不給這個字段插入資料,會自動將當前伺服器時間作為這個欄位的值

datetime 占用8個位元組,表示年月日時分秒

time 占用3個位元組,表示時分秒

文字型別

能夠不用文字型別,盡量不要用

text

mediumtext

1. tinyint(1)與tinyint(3)區別 

tinyint(1)這個1只是寬度,對儲存範圍,占用位元組數沒有影響。

2. 使用者狀態選擇tinyint還是列舉?

應該選擇tinyint,原因:tinyint占用位元組小,並且tinyint擴充套件好。

1、 給經常作為where/order by/left join  on 的兩端字段新增索引

2、 如果乙個表中有很多字段需要新增索引,不要分別新增索引,而是應該新增聯合索引

//聯合索引

alter table user add index idx(name,pass);

3、 新增聯合索引時,區分度大的字段寫在前面

4、 要根據聯合索引的第乙個欄位來檢索資料

5、 like 「%jack%」 使用不上索引,盡量不要使用like

6、 給name/age新增聯合索引

select id,name,pass,age,height from user where name ='jack' and age='18';

select id,name from user(id,name,pass,***,age);

//應用

select name,id,pass from user where id = 1+2 limit 100;//100萬條,

1、 不要使用*, 盡量只查需要的字段。因為*會查詢出更多資料,會導致傳輸時間變長。

2、 給每條查詢的sql新增limit, 原因:減少傳輸資料大小

3、 根據索引來檢索資料

4、 sql語句中儘量減少使用mysql內建函式,運算

5、 子查詢減少使用,子查詢不要用到核心**中

6、 減少關聯表查詢,適度冗餘字段

7、 將多表聯查,切分為多個單錶查詢

訂單表:

id  uid  gid   total   buy_time  make_time  status
訂單詳情表

id   oid   gid   num   price    shouhuorenname   address   phone   gname
個人中心:

檢視訂單:

列出訂單下面有什麼商品:(商品名字、商品**、商品購買數量、下單時間、狀態)

select gname,price,num,buy_time,status from orders left join order_detail;

$arr = select id,uid,gid,buy_time from orders;

foreach ($arr as $v)

1、 事務支援情況不同

2、 鎖機制方式不同

3、 查詢速度不同

4、 生成檔案數量

規則 === 正規化

user表

第一正規化:保證每個列都是乙個原子,保證不能再分解。

id   address

1 中國廣東廣州天河區...

id contry pro city other

1 中國 廣東

《高效能mysql》

《高可用mysql》

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...

資料庫引擎優化顧問優化資料庫

現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...

資料庫優化

資料庫優化 1 合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是提高查詢效率。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引 在頻繁進行排序或分組 即進行groupby或orderby操作 的列上建立索引...