請各位大佬指點指點。
有一個商品表,有status 0 1 2 分別代表一個商品的狀態 0 審核 1 正常 2失效。
由于做的是云端商品庫,供別人來采集呼叫的。所以基本所有的資料展示都需要status =1.
還有一些小的篩選專案,我現在做的是索引如下:

所有索引基本都加了status,但是由于庫是幾百萬幾千萬的庫,這種效果有點差了。高并發的情況下很差。
有哪位大佬有相關設計經驗的能否指點一二!
我現在的想法是建立歷史庫,把失效的放到歷史庫去,因為失效的基本不查詢。但兩張表有點麻煩,一張表能否通過合適的索引解決這個問題,請大佬指正!!
uj5u.com熱心網友回復:
索引要結合資料的分布情況和具體的查詢SQL來設計的,你的這些資訊,還看不出你的索引設計得合理不合理。索引的作用是減少讀取資料的IO,你應該根據這一點結合你具體的SQL和表資料去設計索引。
我看你的索引全部都是status開頭的,這并不是一種完全正確的做法,例如其中的K_SELLER索引,我估計status=1的資料應該不在少數吧,這里你調換一下索引列的位置,K_SELLER(sellid,status),如果sellid是選擇性比較高的列,那么在同樣status=1 and sellid=abc的條件下,K_SELLER(sellid,status)就首先通過sellid減少了索引掃描的范圍。又或者實際情況是status,sellid是更好的選擇,我這里說的意思是,注意一下索引列的順序問題。
你的問題涉及太多的資訊,沒有親自到實際環境,很難給出最佳的解決方案。
關于建立歷史庫,如果你能處理好代碼邏輯,減少表的資料量總是對查詢有好處的。
uj5u.com熱心網友回復:
商品表怎么會有幾千萬的資料?而且商品表上怎么會有 seller 銷售員屬性?我的理解你這個可能是一個銷售商品的表,跟日期有比較強的關聯關系,可以采用磁區表的方式來處理。uj5u.com熱心網友回復:
這個要看你的陳述句怎么寫了,索引是為陳述句服務的。uj5u.com熱心網友回復:
做的淘寶客優惠券資訊,定期的發布商品,優惠券過期了就吧商品弄失效,商品失效的話也就幾天時間,失效的暫時沒有做洗掉處理。所以商品加了狀態篩選status
uj5u.com熱心網友回復:
基本所有的資料展示都需要status =1,那還建立索引干什么??可能效果還不如走全表掃描來得快,索引是讓你快速查詢到結果的。你自己試著看一下explain陳述句,看下具體索引使用情況
uj5u.com熱心網友回復:
樓主可以去查一下,性別欄位是否需要建立索引,原理和你這個status不建立索引是一致
uj5u.com熱心網友回復:
explain過了,用對是索引,不建立status為索引,滿爆了,因為失效對商品很多,我們只需要查詢沒有失效對商品,但還是不夠完美,看來做失效歷史表是比較好的方法了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/57386.html
標籤:MySQL
上一篇:查資料
下一篇:Invalid <url-pattern> [KaochaCorrectServlet] in servlet mapping
