mysql資料庫優化(一)

2021-10-02 09:25:08 字數 1944 閱讀 7714

在實際專案中,通過設計表架構時,設計系統結構時,查詢資料時綜合提高查詢資料效率

1.適當冗餘

資料庫在設計時遵守三正規化,同時業務資料(對資料的操作,比如資料審核,對某人評分等)和基礎資料(比如資料詳情,使用者描述等)要分開儲存,放在不同表中。在設計資料庫時,三正規化能夠最大限度的節省 資料庫儲存所需的空間,可是缺點是 在查詢,修改等操作時,會造成查詢緩慢,效率低下。所以對於經常查詢的字段應該適當的新增到同乙個表中,適當冗餘,不必嚴格按照三正規化進行設計,這樣 通過捨棄部分儲存空間,提高查詢效率,能夠得到更好的使用者體驗。

for example:使用者基本資訊表(使用者名稱,密碼,身高,體重,三圍),使用者資訊審核表(審核狀態,使用者id);系統需求:要求顯示審核結果時知道每個使用者的使用者名稱和審核狀態;那麼嚴格按照三正規化,需要查詢兩張表;如果把使用者名稱新增到 使用者資訊審核表 中時,只需查詢一張表,查詢時間肯定小於多表查詢。

冗餘字段新增條件:經常進行查詢的字段放在同乙個表中,避免多表查詢

2.資料查詢時,少用in進行查詢

in進行的是全表查詢,不使用索引

for instance:

用關聯查詢:

用in進行巢狀查詢:

所以盡量少用in進行查詢,多用其他的進行代替;如 between 2 and 4 代替  in (2,3,4) 等等。

3.盡量少設定外來鍵關聯

在專案初期進行版本迭代時,對於以後版本無法**的變更,盡量少使用外來鍵關聯,減少表間依賴強度,為以後版本設計提供基礎。因為外來鍵關聯時,修改刪除等操作非常繁雜。

在保證資料完整性時,盡量少設定外來鍵關聯,省去每次查詢外來鍵是否存在的時間。比如 國家免檢產品,在保證產品質量(本表)的前提下,充分相信製造商(外來鍵對應的表)

4.使用redis快取機制

對於重複查詢,沒有改變的資料,可以使用redis快取機制,直接訪問記憶體資料,不再訪問資料庫,減少訪問資料庫的時間(資料庫在硬碟上,redis快取在記憶體中)。思路是:讀取資料庫資料到redis快取中,從redis中取資料給前端。如果涉及到資料修改不大的,可以修改到redis中,固定時間同步到資料庫,保證資料統一完整性。

5.查詢時 盡量不要用 select*from tables;

*代表取表中一組資料到記憶體中,增加記憶體消耗,只取需要的字段,如 selectid from tables;

在python的sqlalchemy庫時,盡量不要用  table.query.filter_by(id=1).first()  ==》select * from table where id=1   ;應該使用db.session.query(table.id).filter(table.id==1).fitst()  ==》 select id from tables where id=1;

6.使用index索引進行查詢優化

把索引建在經常查詢的字段,主鍵,外來鍵,where子句中的資料列,出現在關鍵字order by、group by、distinct後面的字段。

索引建立方法:注意索引不同

7.在使用order by進行排序時,最好被排序的字段是索引

8.其他方法: 

大致思路:減少資料儲存空間,減少訪問資料庫次數,減少讀取到記憶體中的資料量。

MySql資料庫優化筆記 一

新配置了乙個discuz論壇,資料庫也是新安裝,對my.ini沒有進行過任何設定。用ab測試。ab c 100 n 1000 http localhost forum.php測試結果如下 document path forum.php document length 2118 bytes concu...

mysql資料庫的優化 一

資料庫的設計 1,表的字段大小要適當,能小則小 2,資料庫欄位的不要為null,設定為not null 3,使用索引,對where,order by 的條件新增索引 sql的書寫 1,使用left join時先查詢小表,使用小表驅動大表 2,使用join代替子查詢 3,避免使用 否則引擎會放棄索引全...

mysql資料庫優化索引 mysql資料庫索引調優

一 mysql索引 1 磁碟檔案結構 innodb引擎 frm格式檔案儲存表結構,ibd格式檔案儲存索引和資料。myisam引擎 frm格式檔案儲存表結構,myi格式檔案儲存索引,myd格式檔案儲存資料 2 mysql資料庫資料範問原理 innodb btree 1 ibd檔案中主鍵構建b tree...