mysql 查询结果合并 mysql中,分表查询和索引查询哪个更快?
mysql中,分表查询和索引查询哪个更快?
谢谢你邀请我!
决定查询速度的因素有很多,比如内存碎片、数据量大等,都属于I/O问题。表结构设计和查询语句是技术熟练(经验)问题。关于你的子表快还是你的索引快这个问题有一个问题:
创建数据表时,索引是必需的,主键是唯一的索引。
我觉得当我们需要关注查询速度的时候,一定是单个表的数据量越来越大,或者是预测到数据量会越来越大,比如日志表和运行记录,或者是查询的时候有更多的相关表。
如果是像配置数据表这种数据有限的表,加不加主键以外的索引影响不大。
基于单个数据库,
那么对于数据量大、增长速度快的表,就需要增加查询速度的第一指标,分区或子表可以有效提高效率,需要读写分离。
但是,如何分桌是需要注意的。可以按字段(垂直)或某些字段的值特征(水平)来划分表。总之,要尽量做到同表相同的数据特征。在生成SQL时,代码可以决定要查找哪些表,从而避免查询不相关的表。查询的表越少,扫描的记录越少,效率越高。
即时原创回答,一些个人经历,仅供参考!
mysql一张大表,一张小表,如何join最快?
Rows表示相对于前一步骤的结果,此步骤的每一行需要扫描的行数。可以看出,这条sql需要扫描的行数是35773*8134,这是一个非常大的数字。原来表C和表H的记录数分别是40000和10000,差不多是做两个表的笛卡尔积的成本(select * from c,H)。
于是我上网查了一下MySQL实现join的原理。原来MySQL采用了一种叫做嵌套循环连接的算法。嵌套循环Join其实就是把驱动表的结果集作为循环的基础数据,然后把这个结果集中的数据作为过滤条件,逐个查询下一个表中的数据,然后合并结果。如果连接中有第三个参与者,则将前两个表的连接结果集作为循环的基础数据,再次通过循环查询条件在第三个表中查询数据,以此类推。基本上,MySQL采用最容易理解的算法来实现join。所以驱动表的选择很重要,驱动表的小数据可以显著减少扫描的行数。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。