美文网首页数据库
mysql in or 效率对比

mysql in or 效率对比

作者: 错位的季节 | 来源:发表于2017-11-10 11:46 被阅读161次

第一步,创建测试表,并生成测试数据,测试数据为1000万条记录。数据库版本为5.1.63。数据库中关闭了query cache,因此数据库缓存不会对查询造成影响。
第二步:分三中情况进行测试,分别是:
第一种情况:in和or所在列为主键的情形。
第二种情况:in和or所在列创建有索引的情形。
第三种情况:in和or所在列没有索引的情形。
每种情况又采用不同的in和or的数量进行测试。由于测试语句的数据量有4种情况,我这里就称为A组、B组、C组、D组,其中A组为3个值,B组为150个值,C组为300个值,D组为1000个值。具体的测试语句如下:
测试结果如下:
第一种情况,ID列为主键的情况,4组测试执行计划一样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:0.002s in的执行时间为:0.002s
B组or和in的执行时间: or的执行时间为:0.004s in的执行时间为:0.004s
C组or和in的执行时间: or的执行时间为:0.006s in的执行时间为:0.005s
D组or和in的执行时间: or的执行时间为:0.018s in的执行时间为:0.014s

第二种情况,ID列为一般索引的情况,4组测试执行计划一样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:0.002s in的执行时间为:0.002s
B组or和in的执行时间: or的执行时间为:0.006s in的执行时间为:0.005s
C组or和in的执行时间: or的执行时间为:0.008s in的执行时间为:0.008s
D组or和in的执行时间: or的执行时间为:0.021s in的执行时间为:0.020s

第三种情况,ID列没有索引的情况,4组测试执行计划一样,执行的时间也基本没有区别。
A组or和in的执行时间: or的执行时间为:5.016s in的执行时间为:5.071s
B组or和in的执行时间: or的执行时间为:1min 02s in的执行时间为:5.018s
C组or和in的执行时间: or的执行时间为:1min 55s in的执行时间为:5.018s
D组or和in的执行时间: or的执行时间为:6min 17s in的执行时间为:5.057s

结论:
从上面的测试结果,可以看出如果in和or所在列有索引或者主键的话,or和in没啥差别,执行计划和执行时间都几乎一样。如果in和or所在列没有索引的话,性能差别就很大了。在没有索引的情况下,随着in或者or后面的数据量越多,in的效率不会有太大的下降,但是or会随着记录越多的话性能下降非常厉害,从第三中测试情况中可以很明显地看出了,基本上是指数级增长。
因此在给in和or的效率下定义的时候,应该再加上一个条件,就是所在的列是否有索引或者是否是主键。如果有索引或者主键性能没啥差别,如果没有索引,性能差别不是一点点!

相关文章

  • mysql in or 效率对比

    第一步,创建测试表,并生成测试数据,测试数据为1000万条记录。数据库版本为5.1.63。数据库中关闭了query...

  • MongoDB与MySQL效率对比

    本文主要通过批量与非批量对比操作的方式介绍MongoDB的bulkWrite()方法的使用。顺带与关系型数据库My...

  • mysql 存储引擎

    mysql 存储引擎 每个表可单独配置存储引擎 对比 总结 MyISAM是5.5.5版本之前的默认引擎(效率更高)...

  • Mysql、MySQLi、PDO

    Mysql、MySQLi、PDO对比 MySQLi、PDO对比

  • MySQL和PostgresSQL对比

    对比版本Mysql 5.7PostgresSQL 9.5 对比方面 1、 流行程度Mysql > PostgreS...

  • MySQL版本

    MySQL版本对比 服务器性能 1.mysql,percona mysql,mariadb均开源,支持分区表,My...

  • oracle&mysql对比

    oracle&mysql对比 数据类型对比 1.字符型 mysql的字符型根据长度和是否定长分为了很多类型,常见的...

  • erlang连接Mysql数据库(mysql-otp)

    对比emysql和mysql-otp之后,个人选择了mysql-otp作为mysql连接驱动,并使用raber加载...

  • Elasticsearch的基本概念

    MySQL与Elasticsearch对比 MySQLElasticsearch说明TableIndex索引(in...

  • oracle 对比mysql

    1 . to_char() to_date() oracle中的转字符:to_char()oracle中的...

网友评论

    本文标题:mysql in or 效率对比

    本文链接:https://www.haomeiwen.com/subject/tnqbmxtx.html