《MYSQL數(shù)據(jù)庫MySQL中字符串索引對(duì)update的影響分析》要點(diǎn):
本文介紹了MYSQL數(shù)據(jù)庫MySQL中字符串索引對(duì)update的影響分析,希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
本文分析了MySQL中字符串索引對(duì)update的影響.分享給大家供大家參考,具體如下:MYSQL應(yīng)用
對(duì)某一個(gè)類型為varchar的字段添加前綴索引后,基于該子段的條件查詢時(shí)間基本大幅下降;但對(duì)于update操作,所耗的時(shí)間卻急劇上升,主要原因是在更新數(shù)據(jù)的同時(shí),mysql會(huì)執(zhí)行索引的更新.MYSQL應(yīng)用
下面做了一個(gè)簡(jiǎn)單的試驗(yàn).MYSQL應(yīng)用
(1)首先對(duì)某個(gè)億級(jí)記錄的表字段所有記錄執(zhí)行更新:MYSQL應(yīng)用
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)計(jì)用時(shí)4個(gè)小時(shí)左右.MYSQL應(yīng)用
(2)然后對(duì)某個(gè)億級(jí)記錄的表子段添加索引:MYSQL應(yīng)用
sql = "alter table tbl_name add index platforms_index(platforms(8));" cursor.execute(sql)
然后再執(zhí)行同上的update語句,統(tǒng)計(jì)用時(shí)將近9個(gè)小時(shí).MYSQL應(yīng)用
(3)由此可見字符串索引對(duì)于update等操作在性能上有極大的影響.MYSQL應(yīng)用
雖然以上小試驗(yàn)并沒有多大實(shí)際意義,但是可以延伸一下,如果不對(duì)該字段添加索引,而是直接把該字段數(shù)據(jù)存儲(chǔ)到另一個(gè)小表b,然后在該表添加一個(gè)id字段映射到小表b,然后再執(zhí)行update操作;這樣性能又如何呢?MYSQL應(yīng)用
理論上性能應(yīng)該與記錄的重復(fù)度有關(guān),如果重復(fù)率高,小表b將會(huì)很小(unique去重);而更新所用時(shí)間為通過原表映射查詢表b字段的時(shí)間+更新表b記錄的時(shí)間,總體上應(yīng)該比更新記錄的時(shí)間+更新索引的時(shí)間要少.MYSQL應(yīng)用
不過只是估算,結(jié)果如何感興趣的朋友可以動(dòng)手驗(yàn)證一下.MYSQL應(yīng)用
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過程技巧大全》、《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總》MYSQL應(yīng)用
希望本文所述對(duì)大家MySQL數(shù)據(jù)庫計(jì)有所幫助.MYSQL應(yīng)用
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1654.html