在專案業務中經常會出現根據非索引字段查詢資料的場景。如根據根據訂單支付狀態查詢未支付或者已支付的的訂單資訊進行一些業務處理。假設訂單表支付狀態列有兩個值(1-已支付/0-未支付),實際專案中由於此字段僅有兩個值是不適合加索引的,所以當我們僅根據支付狀態字段查詢訂單資訊的時候其實是進行的全表掃瞄。如下圖所示:
執行該sql耗時如下:
mysql資料表主鍵id預設為唯一索引,所以可根據id排序+做分頁來實現索引。但是此分頁跟普通分頁有所不同,即此分頁不查符合查詢條件的總條數。以此類推。查第一頁的時候查詢出符合條件的第一頁資料的id最大值,如下所示:
根據執行計畫可以看出此sql已經走了索引,且掃瞄行數只有100行,執行時間變短。
備註:傳統的認為列舉類的字段不適合加索引,如:男、女。其實可以根據各自的資料佔比來確定是否需要加索引。當該類資料佔總資料量的5%以下、或資料量小於2萬行均可以走索引
大資料量表刪除插入
1。alter table t nologging 不記錄日誌,完成後記錄日誌。2。先停用索引,在全部操作完成後啟用索引。3。多次小批量提交。4。選擇業務操作量少的時間進行。create or replace procedure delbigtab p tablename in varchar2,p...
快速刪除大資料量表
要清空表中資料,100w條資料以上的表,開始我們使用delete from t user進行刪除,這樣操作太慢了,需要等好長時間,如果資料量更大,那麼我們要等的時間無法想象。可以用以下方法進行刪除 假設要刪除的原表為source t 1.第一步生成中間表 create table source t ...
設計大資料量表結構
上篇文章講解了傳統資料庫的一些設計注意點。本篇為第二篇,在大資料量的情況下,如何去提前設計這個表結構,來達到乙個比較好的效果。對於團隊,對於後續的維護和擴充套件都帶來更大的便利。自增id 自增id還是可以有,但是不是必須的了。但是建議還是每張表中有乙個自增id。為什麼,還是那句話,做資料查詢,遷移,...