資料庫查詢優化

2022-04-10 19:57:18 字數 1245 閱讀 1779

0、寫在前面

做系統的時候各種聯表跨表查詢,導致查詢巨慢無比,想了各種辦法優化,記錄一下

有些想法還沒應用到專案上,應用上後再來更新

1、思路

整體思路是先找出查詢慢的點,主要都發生在n級聯表跨表查詢的時候,快取+優化查詢速度來解決

1.1 快取

查詢結果直接存到redis裡,這樣後續查詢就不用再走mysql了

1

#快取key

2 redis_key = '

show_getdepartmentsumstatistics_%s

'%(id)3#

有快取返回快取,無快取查詢資料庫

4 rdata ={}

5if redis_cache.hget(redis_key, '

data'):

6 rdata.update(json.loads(redis_cache.hget(redis_key, '

data

')))

快取為了保證資料同步,再有增刪改操作後,還需要清除相對應的快取

這裡使用觸發器來解決

觸發器:

監視誰:table

監事動作:insert、update、delete

觸發事件:after

觸發事件:清空快取

1

#case表,增刪改

2 @sql_event.listens_for(case, '

after_insert')

3def

4redis_cache.flushdb()

56 @sql_event.listens_for(case, '

after_delete')

7def

8redis_cache.flushdb()

910 @sql_event.listens_for(case, '

after_update')

11def

12 redis_cache.flushdb()

觸發器1.2 慢查詢優化

這個目前還是理論,還沒應用到專案上,看了一些優化教程

主要的優化思路就是建索引和避免導致不使用索引查詢的操作、還有避免使用聯合查詢

比如in、like之類的會使索引失效,避免使用

為了避免聯合查詢可以適當使用冗餘資料

可以根本不建立外來鍵,在多表查詢時候進行多次查詢再手動進行資料組合

資料庫查詢優化

方法 1 1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。步驟閱讀 22.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is...

資料庫查詢優化

本記載,用於保留面對大資料量時,查詢速率待優化,只記錄要點,具體如何操作,還需查詢 1 索引優化 通過建立合理高效的索引,提高查詢的速度.2 sql優化 根據需求,組織優化sql語句,使查詢效率達到最優,在很多情況下要考慮索引的作用 3 水平拆分 如果表的資料量增長特變塊,索引帶來的效能優化可能達到...

資料庫查詢優化

1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄 如 select id from t where num is null 可以在nu...