資料庫層面建立索引表提高查詢效率的一種思路

2021-08-24 20:47:57 字數 1385 閱讀 4986

以前在網上讀過的技巧性文章,完全憑腦子記住,如果專案中剛好運用過,那還會有點印象。如果沒實踐,時間長了必定是忘光了。為了從此避免這種情況,還是要相信「好記性不如爛筆頭」。

這種碎片化的文章為什麼依然要存在,是因為關於優化這種命題,涉及的面太廣,暫時也沒有一本書之類的能完全給你系統的學習,所以針對這樣的內容就先把收集到的有價值的方法先記錄,等自己掌握的多了,再寫總結性的,對比性的文章。

別人的東西化成自己的,類似讀薄書

場景是這樣:查詢資料庫多張表的字段,綜合成多字段的大**給前端,要支援條件過濾,分頁。當資料量大的時候可以用為這些不同表的字段綜合設計一張「索引表」

原記錄id

欄位名值

sku1

size

xsku1

color

redsku1

price

55sku2

size

msku2

color

redsku2

price

50sku3

size

msku3

color

green

sku3

price60

如果要查詢

select record_id from searchtable where  

record_id in

(select record_id from searchtable where type='size' and value in ('3','4', ...))

and

record_id in

(select record_id from searchtable where type='color' and value in ('red','blue', ...))

and

...and

type='time_created'

order by cast(value as unsigned) desc

limit 300

這種表的設計手法用的很普遍了,比如產品的屬性,屬性字段經常增減,有的產品種類可能具備屬性abc,有的可能abd,一般都用這種橫表轉豎表的形式。

只不過原文提的是在一開始沒有這種豎表的情況下,進行新增一張索引表,可以達到業務上**實現的簡單,並能極大加快查詢速度,用這種方式,排序和分頁也解決了。如果字段特別多,這種方法還能實現分步遷移,即先在索引表只冗餘部分字段,用這部分字段快速縮小recordid範圍,然後再繼續原來的老邏輯。

如果不用這張索引表,原始的方法就需要多表連線

最後在這個基礎上可以將查出的recordid去快取查詢,這樣就完成了兩步優化。

(這不是本文的重點,這篇重點在積累資料庫表的設計對查詢速度的優化)

建立索引提高資料庫查詢速度的原理

索引是提高資料查詢最有效的方法,也是最難全面掌握的技術,因為正確的索引可能使效率提高10000倍,而無效的索引可能是浪費了資料庫空間,甚至大大降低查詢效能。索引的管理成本 1 儲存索引的磁碟空間 2 執行資料修改操作 insert update delete 產生的索引維護 3 在資料處理時回需額外...

通過建立索引提高資料庫查詢速度的原理

索引是提高資料查詢最有效的方法,也是最難全面掌握的技術,因為正確的索引可能使效率提高10000倍,而無效的索引可能是浪費了資料庫空間,甚至大大降低查詢效能。索引的管理成本 1 儲存索引的磁碟空間 2 執行資料修改操作 insert update delete 產生的索引維護 3 在資料處理時回需額外...

mysql通過建立分割槽和索引來提高查詢效率

drop table if exists test create table test id int 10 unsigned not null auto increment,time datetime not null comment 業務時間 primary key id time engine ...