MySQL性能对比

实战SQL分析

在这里插入图片描述

执行计划1:主键doc_id查询

在这里插入图片描述

上图,显示根据主键查询

执行计划2 新加d.is_deleted为无删除查询

在这里插入图片描述

执行计划

在这里插入图片描述

上图是只追加一个表的删除查询条件

执行计划3 新加s.is_deleted为无删除查询

在这里插入图片描述

执行计划

在这里插入图片描述

上图又追加 另一个表的是否删除状态的条件

注意:

执行计划4 Between and 和 IN
EXPLAIN SELECT * FROM doc_items WHERE link_type BETWEEN 1 AND 6;

在这里插入图片描述

EXPLAIN SELECT count(*) FROM knowledge_doc WHERE review_status IN (0,1,2);

在这里插入图片描述

在查询小数据量体下,IN和BEWTEEN AND效率不是太明显,从filtered字段值30 比 11.11

在查询近5W数据量体下,IN比较BEWTEEN AND效率就开始明显了

EXPLAIN SELECT * FROM doc_items WHERE link_type BETWEEN 1 AND 6;

在这里插入图片描述

EXPLAIN SELECT * FROM doc_items WHERE link_type IN (1,2,3,4,5,6);

在这里插入图片描述

所以、个人写SQL比较多的用IN,而比较少的用BETWEEN AND

执行计划5 查询字段是否是索引字段
EXPLAIN SELECT item_id FROM doc_items;

在这里插入图片描述

查询的字段是索引字段,则会命中索引

猜测,如果查询字段是索引字段,where条件字段是非索引字段,此SQL还会走索引吗?

验证以上猜测:
EXPLAIN SELECT item_id FROM doc_items WHERE link_type = 1;

在这里插入图片描述

结果:显示ALL 为全表扫描,未命中索引

猜测2 :where 字段加上索引比对查询时间和执行计划
EXPLAIN SELECT item_id FROM doc_items WHERE link_type = 6;

同样的SQL,数据量体在近3W查询结果中,在没加索引的情况下查询是300ms左右,加完索引后的查询效率,80ms左右

在这里插入图片描述

在这里插入图片描述

Extra: 很多额外的信息会显示到这个字段,上图是null,说明没有任何额外信息

  • Using index

    覆盖索引扫描,表示查询在索引树中就可查找所需数据,不用扫描表数据文件,往往说明性能不错

猜测3:对比where为索引字段,查询字段为非索引字段和索引字段,耗时对比
SELECT link_value FROM doc_items WHERE link_type = 6;

在这里插入图片描述

查询字段加入索引后

对比结果,没什么变化,此猜测没什么意义

联合索引:最左前缀原则

在这里插入图片描述

在这里插入图片描述

对比两张图,可看出possible_keys是能适合使用的索引key,但是查询效率没什么明显的变化,所以说,有些索引在possible_keys中出现,但并不表示此索引会真正被MySQL使用到。效率也没有明显提升。

MySQL在查询时具体使用哪些索引,由key 字段决定。

组合索引直接命中第一个有效

EXPLAIN SELECT doc_id FROM doc_items WHERE link_type = 6 AND is_deleted = 1;

在这里插入图片描述

rows 由5W+ 降至 2.4W+ 效率直接提升

查询条件和联合索引字段一致时的执行计划:

在这里插入图片描述

结论,联合索引,符合最左匹配原则,同时也符合全匹配原则即所有联合字段查询。

或者,多余字段加入后,联合索引也是有效的,只是filtered比例会有所下降。

总结

后续实战中继续添翼。。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
千万级数据量级下,MongoDB和MySQL性能方面有着一些区别。 首先,在千万级数据的读取性能这方面,MongoDB通常表现得更好。MongoDB使用了基于磁盘的存储引擎,它的数据模型是面向文档的,并且有着更灵活的数据结构。这使得MongoDB在处理大量读取请求时,具有更高的扩展性和并发性能。同时,MongoDB还支持水平扩展,可以通过分片来增加吞吐量。 而MySQL则使用了传统的关系型数据库模型,在大量读取请求的情况下,需要通过读取磁盘上的数据页来获取数据,相对来说IO开销较大。虽然MySQL也支持索引来提高读取性能,但在大量读取请求的情况下,性能可能有限。 其次,在写入性能方面,MongoDB和MySQL有着一些差异。MongoDB采用了写入先缓存在内存中,再定期写入磁盘的方式,这可以提高写入性能。而MySQL则需要在每个写操作之后立即将数据持久化到磁盘上,这在写入量大的情况下可能会导致性能下降。 另外,千万级数据量级下,MongoDB的分布式特性可以发挥更大的作用。MongoDB支持自动数据分片和负载均衡,可以更好地处理大规模数据的存储和查询需求。而MySQL在分布式方面的支持相对较弱。 总的来说,MongoDB在千万级数据量级下的可扩展性、读取性能和写入性能方面具有一定优势。但在某些特定场景或需求下,MySQL可能仍然是更合适的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值