建分割槽表索引優化SQL

2021-07-06 04:52:32 字數 966 閱讀 4719

sql 優化的 分類早就有了, 就是碰不到 優化的典型例子, 今天遇到乙個....... 

頁面上面的sql :

select count(*)

from   taba.npai, dm_area da

where npai.local_area_id = 3

and npai.area_id = da.area_id   

第一次跑 65s    讓人忍受不了

簡單看下執行計畫, 忘記搞出來了,  大致知道內容。    taba  的local_area_id  表作為  list 分割槽, 分割槽中大概有 2千萬資料, 看了乙個 segements  大概 2.5g好像。  

謂詞過濾條件為   da.area_id   , 大概91 條資料, 主要 dm_area  的影響,  dm_area 表正好為 參數列,   area_id  對應一條資料,  

於是優化sql 思路有了,考察了 area_id  列, 發現最適合建的索引      create bitmap  index idx_area_id on tab (area_id,0) local;   

select /*+ index(npai, idx_area_id) */ count(1) from  taba  npai,    dm_area da 

where npai.local_area_id = 3 and   npai.area_id = da.area_id    ---- 結果好像是 5秒  

一看還有地方 可以改進 

select /*+ index(npai, idx_area_id) */ count(1) from  taba  npai where   npai.local_area_id = 3

and exists ( select 1 from   dm_area da where npai.area_id = da.area_id);    --- 0.017s  

最終定型

分割槽表 分割槽索引2 再談

分割槽應用 一般一張表超過2g的大小,oracle是推薦使用分割槽表的。分割槽一般都需要建立索引,說到分割槽索引,就可以分為 全域性索引 分割槽索引,即 global索引和local索引。前者並不對索引進行分割槽 索引也是表結構,索引大了也需要分割槽 而全域性索引可修飾為分割槽索引 我的理解是 分割...

優化案例 分割槽表場景下的SQL優化

有個表做了分割槽,每天乙個分割槽。該錶上有個查詢,經常只查詢表中某一天資料,但每次都幾乎要掃瞄整個分割槽的所有資料,有什麼辦法進行優化嗎?有乙個大表,每天產生的資料量約100萬,所以就採用表分割槽方案,每天乙個分割槽。下面是該錶的ddl create table t1 id bigint 20 no...

MySQL分割槽表與索引

一 定義 簡而言之就是將一張邏輯上仍然完整的表,在物理儲存的過程中,將表上的資料按某種指定的劃分依據,在物理上存放到多個 表空間 物理檔案上 這樣查詢資料時,不至於每次都掃瞄整張表而只是從當前的分割槽查到所要的資料,這樣大大提高了資料查詢的速度。優點 缺點 二 分割槽表的原理 其實對儲存引擎來說,底...