{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

mysql中,分表查询和索引查询哪个更快?

YuqiYuqi 回答0 收藏1
收藏问题

4条回答

BigNerdCoding

BigNerdCoding

回答于2022-06-28 14:38

“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

如题,在mysql中,分表查询和索引查询那种方式更快?

哟哟认为查询速度的快慢要针对于表里数据的多少来定,并且分表查询时也要将索引引入才能更快的将目标数据进行锁定,单纯的来对比分表查询和索引查询的话,个人感觉索引查询相对比要快一些。

在mysql中为什么会建立多个表呢?

这是因为在庞大数据量存储时,建立多个表可以将数据进行均匀的分布,每一个表内对应多带带的一项数据,查询或调用时可以方便调取;若没有分表的话,所有的数据可能存在一个表中,在写入或查询调取时会增加数据库的负担,延长查询时间,增加磁盘的IO,因此针对大数据量存储时最好建立不同类别的表,可以更方便更快捷的写入并调取。

索引是对数据库表中一列或多列的值进行排序的结构,用于快速查询数据库表中的特定记录,提高查询速度。

不论是分表查询还是单表查询一定要引入索引,这样才能更快的定位目标数据。

因此哟哟认为,在数据量很大的情况下,建议分表+索引查询可能速度更快,若数据量很小的情况下,直接索引查询即可。

欢迎大家多多关注我,在下方评论区说出自己的见解。

评论0 赞同0
  •  加载中...
zr_hebo

zr_hebo

回答于2022-06-28 14:38

分表和索引并不是二选一的问题

通常使用MySQL时(其余的数据库也一样),大多数时候索引是必须要增加的,好处是查询速度提升非常大,数据量越多越明显;缺点是会对新增、修改、删除的速度造成一定程度的影响,不过这个影响和查询效率的提升相比,不值一提。

当单表中的数据量进一步增多,例如到了大几千万、几亿这个级别,单台MySQL已经不足以支撑这么多的数据了,这时候就要考虑分区、分表或分库了;当然分表之后,每一个子表中仍然可以有索引。

如果非要说分表查询和索引查询哪个快,当数据量没达到需要分表的程度时,比如只有一百万的数据量,我觉得还是索引查询快,毕竟分表查询还需要程序路由到数据所在的分区上,这个也是需要消耗时间的。

多说说分表的事儿

MySQL单表数据量在一千万以内的时候,性能是比较好的,超过千万性能会有下降,到了五六千万以上,性能下降就比较明显了,这是就要考虑分表了。

分表另外一个好处是,单个服务器的性能毕竟是有限的,例如磁盘的IO,分表后将子表部署在不同的磁盘上(也可以直接分库),可以利用多台服务器的资源,更好地支持高并发。

常见的分库分表策略

  • RANGE分区:根据某一个字段的区间,进行分区。比如按照id分区,1到10万一个分区,10万零1到20万一个分区。

  • HASH分区:定义一个表达式,对表达式的结果进行分区选择。例如把id和某个整数进行取模运算,结果为1的是一个分区,结果是2的一个分区。

  • 业务字段分区:这个就容易理解了,在业务数据中选择一个合适的字段,作为分区字段。比如按照公司码分区,companyCode=1(北京)为一个分区,companyCode=2(天津)为一个分区;当然,一般不会选择companyName=北京/天津这样的字段;不过这种分表策略,不能保证数据平均,比如北京有五千万数据,天津有五百万数据。

分表/分库虽然看起来很美好,但是问题也不少:跨库关联、分布式事务、结果集合并/排序等问题,都是需要考虑解决的。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。

评论0 赞同0
  •  加载中...
junbaor

junbaor

回答于2022-06-28 14:38

谢谢邀请!

查询快慢主决的因素有很多,存储碎片、数据量大属于I/O类问题;表结构设计、查询语句属于技术是否熟练(经验)问题。对于你的分表快还是索引快的这个问题本身就是有问题的:

在建立数据表的时候,索引是必须的,主键就是唯一索引,

我认为需要关注查询快慢的时候,必定是单表数据量越来越大,或是已预见数据量会越来越大,例如日志表、流水记录等,要不就是查询时关联的表比较多。

如果是像配置类数据表数据量有限的表,加不加除了主键以外索引影响不大。

基于单数据库来说,

那么数据量大,增速快的表要想加查询速度的首先索引是必须的,再加上分区或是分表才能有效的提升效率,有必要还可以做读写分离,

但是在做分表时怎么分就要讲究了,分表可以按字段(纵向)分,也可以按某(些)字段的值特性(横向)去分,总之要尽量达到在同一分表中的数据特性相同,在生成SQL时,代码可以决定向哪几个分表查,达到避免查询无关的分表,查询的表越少,需要扫描的记录越少,效率肯定越高,如果达不到减少读表和记录的话,分表不但不会变快,反而变慢。

即时原创回答,个人的一些体验,仅供参考!

评论0 赞同0
  •  加载中...
KunMinX

KunMinX

回答于2022-06-28 14:38

当然索引快,没有索引要线性搜索,如果记录靠后几乎是全表搜索。理论上只要有索引,搜索速度跟记录数没有关系,索引是一张独立的HASH表。但记录数多的时候,写入索引会变慢。

分表呢只是解决表文件大小问题,和索引不是一回事,而且MYSQL有分区表功能,不用手工维护分表。

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<