個別場景沒必要排序
我原創連線
https://mp.weixin.qq.com/s/3Zx8EBTGwp4sn96AHKJWiQ
經常遇到索引比列還要多的表。為什麼?因為開發結合業務需求一個場景一個索引。比如說一個表有id,name,status,time幾個欄位吧。然後看看這表的索引可能會出現如下的索引:
1、name
2、time
3、name+time
4、time+name
5、status
6、name+status
7、name+status+time
8、status+time
。。。。。。沒完,我就不一一寫了。因為結合業務場景。每個場景來一下,然後發現還是不快,那在已有的上再加一列,或者反過來試試,再或者孫行者這樣不行,者行孫試試?於是乎就出現了類似上面的,各種排列組合。我這還寫少了。實際中怎麼可能就這幾個欄位。
真正結合業務一般怎麼來?比如我有個訂單表,站在使用者維度一定是要看自己的,傳入進來的一定帶userid。然後使用者一定看自己最新的然後往下翻。。。。。。那麼檢索條件應該是userid+time+其他的什麼我們先不管。但是前兩個要素userid和time定了。這是場景1
還是這個訂單,運營人員想看看最近一週哪些使用者買的東西最多。一定是time+userdi++其他的什麼我們先不管。但是前兩個要素time和userid定了。這是場景2
當然必須包括訂單號了。比如說id。那麼以上三個場景按照出現頻次來說佔這個表的select總數多少?我估計99.99%以上。如果這個公司業務量大,日活使用者100w。那麼每天100w次場景1,場景2可能幾百次吧。場景3至少100萬次。這個體量的公司也算可以了。
假設這就是那個表了。以MySQL為例,Oracle PG也一樣。
針對場景1來說我只要建立i1索引。
實驗資料如下:
我先查一下c使用者。注意我沒排時間,時間倒序了。因為我索引指定desc了。
再看一次
那麼這個是的我帶上其他條件。看到了嗎?不影響。
這意味著我們索引就2列,其他不見得都要帶進來。(單表場景下可以)基於這個單表簡單場景,注意一定是單表簡單場景。就可以limit分頁一頁一頁往下了。
其他幾個也看一下吧。
補充說一下MySQL8才支援倒序。
其他資料庫只要支援倒序索引就行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2890231/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [譯] 我無法想象沒有 Git 別名的的場景Git
- 堆排序原理及其應用場景排序
- 搜尋EE場景排序鏈路升級排序
- 小程式沒有入口?這些“場景”你可能還沒用上
- 在Unity中快速搭建一個3A級別的場景Unity
- 一個 Pipeline 的使用場景
- python中 _、__、__xx__() 區別及使用場景Python
- String資料型別的應用場景資料型別
- BeautifulSoup和etree的區別和使用場景
- Redis系列-資料型別及使用場景Redis資料型別
- Java中的引用型別和使用場景Java型別
- mysql與redis的區別與使用場景MySqlRedis
- redis資料型別及應用場景Redis資料型別
- 物件儲存適用於哪些場景?這5個場景皆可使用!物件
- 文字識別解決方案-OCR識別應用場景解析
- 小企業沒必要用CRM系統嗎?
- GAN的五個神奇應用場景
- jmeter 遇到的一個場景問題JMeter
- Redis常見的16個使用場景Redis
- 運維場景下的兩個自我運維
- list與Set、Map區別及適用場景
- 如何理解UDP 和 TCP? 區別? 應用場景?UDPTCP
- Redis五種資料型別應用場景Redis資料型別
- sorted set 資料型別的應用場景資料型別
- Redis 資料型別及其使用場景 String 篇Redis資料型別
- Redis中7種集合型別應用場景Redis型別
- Redis多種資料型別以及使用場景Redis資料型別
- go的 & 和 * 的區別,以及應用場景Go
- PHP陣列多個欄位分別排序PHP陣列排序
- array_multisort 第二個陣列沒有正確排序陣列排序
- 說說你對歸併排序的理解?如何實現?應用場景?排序
- 說說你對選擇排序的理解?如何實現?應用場景?排序
- 程式設計師到底有沒有必要考研程式設計師
- 通用文字識別API-通用文字識別介面可以識別哪些場景文字API
- JS 中 this 在各個場景下的指向JS
- 一個輕APP場景應用-外掛APP
- 八個Docker的真實應用場景Docker
- 使用代理IP的三個常見場景