提高查詢資料速度

2021-08-14 06:18:57 字數 1944 閱讀 1316

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

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資料查詢速度

1,建立索引 2,盡量避免在 where 子句中使用 或 操作符,否則將引擎放棄使用索引而進行全表掃瞄。3,盡量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num 10 or num 20 可以這樣查詢...

提高oracle查詢速度

參看當前排序的方式安排,如果sorts disk sorts memory 5 你就迫切需要進行排序優化了。select from v sysstat where name like sort 查詢結果 所以我們並不需要調整sort area size。因此只能通過重新索引,碎片整理來進行優化。開始...

提高查詢速度方法總結

這個帖子主要總結提高查詢速度的方法,涉及到減少連線資料庫次數 建立索引 優化語句等方面。關於索引,推薦 的這篇文章 改善sql語句的效率 資料量很大怎樣加快索檢速度 索引建立方法的區別 頻繁插入刪除資料需要更新索引 測試了一下sql server 2005 全文檢索 其他關於效率的高頻問題 判斷乙個...