MySQL中字符串索引對update的影響分析
本文分析了MySQL中字符串索引對update的影響。分享給大家供大家參考,具體如下:
對某一個類型為varchar的字段添加前綴索引后,基于該子段的條件查詢時間基本大幅下降;但對于update操作,所耗的時間卻急劇上升,主要原因是在更新數(shù)據(jù)的同時,mysql會執(zhí)行索引的更新。
下面做了一個簡單的試驗。
(1)首先對某個億級記錄的表字段所有記錄執(zhí)行更新:
for idx in range(1, count+1):
sql = "update tbl_name set platforms='"+datetime.now().strftime('%Y%m%d%H%M%S%f')+"' where id="+str(idx)+";"
cursor.execute(sql)
統(tǒng)計用時4個小時左右。
(2)然后對某個億級記錄的表子段添加索引:
sql = "alter table tbl_name add index platforms_index(platforms(8));" cursor.execute(sql)
然后再執(zhí)行同上的update語句,統(tǒng)計用時將近9個小時。
(3)由此可見字符串索引對于update等操作在性能上有極大的影響。
雖然以上小試驗并沒有多大實際意義,但是可以延伸一下,如果不對該字段添加索引,而是直接把該字段數(shù)據(jù)存儲到另一個小表b,然后在該表添加一個id字段映射到小表b,然后再執(zhí)行update操作;這樣性能又如何呢?
理論上性能應(yīng)該與記錄的重復(fù)度有關(guān),如果重復(fù)率高,小表b將會很小(unique去重);而更新所用時間為通過原表映射查詢表b字段的時間+更新表b記錄的時間,總體上應(yīng)該比更新記錄的時間+更新索引的時間要少。
不過只是估算,結(jié)果如何感興趣的朋友可以動手驗證一下。
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》、《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》
希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。
相關(guān)文章
MySQL數(shù)據(jù)庫SELECT查詢表達(dá)式解析
這篇文章主要介紹了MySQL數(shù)據(jù)庫SELECT查詢表達(dá)式解析,文中給大家介紹了select_expr 查詢表達(dá)式書寫方法,需要的朋友可以參考下2018-04-04
MySQL開啟遠(yuǎn)程訪問權(quán)限的最新方法
這篇文章主要給大家介紹了關(guān)于MySQL開啟遠(yuǎn)程訪問權(quán)限的最新方法,在MySQL中,要實現(xiàn)遠(yuǎn)程訪問,首先需要在MySQL服務(wù)端上開啟相應(yīng)的權(quán)限,需要的朋友可以參考下2023-08-08

