热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysqlin优化_mysql优化in或者or选择

在数据库查询时,很多情况下会用到or或者in来过滤数据。这里比较下这二者的效率,看看哪个更适合使用场景。测试平台:centos7_x86_

在数据库查询时,很多情况下会用到or或者in来过滤数据。这里比较下这二者的效率,看看哪个更适合使用场景。

测试平台:centos7_x86_64 mysql-5.7.18

创建表,插入测试数据(1000万条记录)

mysql> create table t_user (id int,name varchar(30));

Query OK, 0 rows affected (0.11 sec)

通过存储过程插入1000万条记录,代码如下:

mysql> delimiter $$

mysql> create procedure sp_insert()

-> begin

-> declare i int;

-> set i = 0;

-> while i <&#61; 10000000 do

-> set autocommit &#61; 0;

-> set i &#61; i &#43; 1;

-> insert into t_user values (i,concat(&#39;u&#39;,i))

-> if i%5000 &#61; 0 then

-> commit;

-> end if;

-> end while;

-> end

-> $$

mysql> delimiter ;

mysql> call sp_insert();

Query OK, 1 row affected (8 min 1.52 sec)

测试结果

测试SQL&#xff1a;select from t_user where id in (….);

select from t_user where id &#61;. or id &#61; .. or id &#61; ……

(1) 无索引的情况&#xff1a;

Or和in的执行时间(2条记录)&#xff1a;in用时3.83s or用时3.90s

Or和in的执行时间(4条记录)&#xff1a;in用时3.88s or用时4.27s

Or和in的执行时间(6条记录)&#xff1a;in用时3.93s or用时4.78s

Or和in的执行时间(10条记录)&#xff1a;in用时3.99s or用时5.53s

(2) 是primay key的情况&#xff1a;

Or和in的执行时间(2条记录)&#xff1a;in用时0.00061825s or用时0.00061400s

Or和in的执行时间(3条记录)&#xff1a;in用时0.00068200 or用时0.00066425

Or和in的执行时间(6条记录)&#xff1a;in用时0.00057650s or用时0.00064200s

Or和in的执行时间(10条记录)&#xff1a;in用时0.00096200s or用时0.00092925

3.总结&#xff1a;

Or或者in所在列有索引的情况下。执行效率差异不大。所在列无索引的情况下,in的效率更高一些。推荐用in.



推荐阅读
  • 本文介绍 SQL Server 的基本概念和操作,涵盖系统数据库、常用数据类型、表的创建及增删改查等基础操作。通过实例帮助读者快速上手 SQL Server 数据库管理。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细介绍了如何在 MySQL 中授予和撤销用户权限。包括创建用户、赋予不同级别的权限(如表级、数据库级、服务器级)、使权限生效、查看用户权限以及撤销权限的方法。此外,还提供了常见错误及其解决方法。 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • PHP 实现多级树形结构:构建无限层级分类系统
    在众多管理系统中,如菜单、分类和部门等模块,通常需要处理层级结构。为了高效管理和展示这些层级数据,本文将介绍如何使用 PHP 实现多级树形结构,并提供代码示例以帮助开发者轻松实现无限分级。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • RedHat 系统下配置国内 YUM 源以替代官方收费源的方法
    本文详细介绍如何在 RedHat Linux 中安装并配置 YUM 包管理器,并通过使用国内镜像源来解决因未购买官方服务而导致的更新源限制问题。 ... [详细]
  • QNX 微内核(procnto-instr)的监测版本内置了高级跟踪与分析工具,能够实现实时系统监控。该模块适用于单处理器及多处理器系统。 ... [详细]
  • MySQL InnoDB Double Write机制详解
    本文深入探讨了MySQL InnoDB存储引擎的Double Write技术,该技术通过在内存和磁盘上创建数据页的副本,确保了部分写失效(Partial Page Write)情况下的数据完整性和可靠性。同时,文章介绍了InnoDB以页为单位进行读取和更新的机制,并详细解析了Double Write的工作原理。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 本指南详细介绍了如何在 CentOS 7.0 系统上部署 Spring Boot 2.x 应用程序,包括必要的配置和步骤。 ... [详细]
author-avatar
@Cobub
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有