色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql中,分表查詢和索引查詢哪個更快?

林玟書2年前14瀏覽0評論

分表和索引并不是二選一的問題

通常使用MySQL時(其余的數據庫也一樣),大多數時候索引是必須要增加的,好處是查詢速度提升非常大,數據量越多越明顯;缺點是會對新增、修改、刪除的速度造成一定程度的影響,不過這個影響和查詢效率的提升相比,不值一提。

當單表中的數據量進一步增多,例如到了大幾千萬、幾億這個級別,單臺MySQL已經不足以支撐這么多的數據了,這時候就要考慮分區、分表或分庫了;當然分表之后,每一個子表中仍然可以有索引。

如果非要說分表查詢和索引查詢哪個快,當數據量沒達到需要分表的程度時,比如只有一百萬的數據量,我覺得還是索引查詢快,畢竟分表查詢還需要程序路由到數據所在的分區上,這個也是需要消耗時間的。

多說說分表的事兒

MySQL單表數據量在一千萬以內的時候,性能是比較好的,超過千萬性能會有下降,到了五六千萬以上,性能下降就比較明顯了,這是就要考慮分表了。

分表另外一個好處是,單個服務器的性能畢竟是有限的,例如磁盤的IO,分表后將子表部署在不同的磁盤上(也可以直接分庫),可以利用多臺服務器的資源,更好地支持高并發。

常見的分庫分表策略

  • RANGE分區:根據某一個字段的區間,進行分區。比如按照id分區,1到10萬一個分區,10萬零1到20萬一個分區。

  • HASH分區:定義一個表達式,對表達式的結果進行分區選擇。例如把id和某個整數進行取模運算,結果為1的是一個分區,結果是2的一個分區。

  • 業務字段分區:這個就容易理解了,在業務數據中選擇一個合適的字段,作為分區字段。比如按照公司碼分區,companyCode=1(北京)為一個分區,companyCode=2(天津)為一個分區;當然,一般不會選擇companyName=北京/天津這樣的字段;不過這種分表策略,不能保證數據平均,比如北京有五千萬數據,天津有五百萬數據。

分表/分庫雖然看起來很美好,但是問題也不少:跨庫關聯、分布式事務、結果集合并/排序等問題,都是需要考慮解決的。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。