问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MySql的in语句有什么用?

发布网友 发布时间:2022-04-23 02:55

我来回答

2个回答

懂视网 时间:2022-04-09 15:03

创建测试数据库

[root@HE1 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.7.15-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘h‘ for help. Type ‘c‘ to clear the current input statement.

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.15-log |
+------------+
1 row in set (0.00 sec)


[root@HE3 ~]# /usr/local/mariadb/bin/mysql -uroot -S /tmp/mariadb.sock 
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 10.1.16-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘h‘ for help. Type ‘c‘ to clear the current input statement.


MariaDB [helei]> select version();
+-----------------+
| version()       |
+-----------------+
| 10.1.16-MariaDB |
+-----------------+
1 row in set (0.00 sec)



如何构建MySQL5.7测试环境和MariaDB10.1测试环境本文不做赘述,如有需要可移步:

一分钟完成MySQL5.7安装

http://suifu.blog.51cto.com/9167728/1855415

MariaDB10.1自动化部署

http://suifu.blog.51cto.com/9167728/1830575



Part2:构建测试表

CREATE TABLE helei (
id INT (10) UNSIGNED NOT NULL AUTO_INCREMENT,
c1 INT (10) NOT NULL DEFAULT ‘0‘,
c2 INT (10) UNSIGNED DEFAULT NULL,
c5 INT (10) UNSIGNED NOT NULL DEFAULT ‘0‘,
c3 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c4 VARCHAR (200) NOT NULL DEFAULT ‘‘,
PRIMARY KEY (id),
KEY idx_c1 (c1),
KEY idx_c2 (c2)
) ENGINE = INNODB;




对比测试结果

Part1:MyriaDB10.1.16

MariaDB [helei]> explain select * from helei where (id,c1) in ((100,2684),(101,3566));
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | helei | ALL  | NULL          | NULL | NULL    | NULL | 5198 | Using where |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)


可以看到,MariaDB对这条SQL总共扫描了5198行,且没有用到任何的索引。



Part2:MySQL5.7.15

mysql> explain select * from helei where (id,c1) in ((100,2684),(101,3566));
+----+-------------+-------+------------+-------+----------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys  | key     | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+----------------+---------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | helei | NULL       | range | PRIMARY,idx_c1 | PRIMARY | 4       | NULL |    2 |    20.00 | Using where |
+----+-------------+-------+------------+-------+----------------+---------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.29 sec)


可以看到,MySQL5.7版本已经用到了索引,一共扫描条数为2行。这是因为该语句已经被MySQL5.7的内部优化器改写为如下图所示:

技术分享




——总结——

可以看出,MariaDB版本内部优化器无法改写,因此对于这类查询只能全表扫描。经测试,MySQL5.6和MariaDB10.0/10.1都无法改写。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。


本文出自 “贺磊” 博客,请务必保留此出处http://suifu.blog.51cto.com/9167728/1860216

5分钟了解MySQL5.7对in用法有什么黑科技

标签:mysql   in   优化   

热心网友 时间:2022-04-09 12:11

select *
from test
where id in (1,2,3)
就是查询id=1 or id=2 or id=3的意思
也有
select *
from test1
where id in (select id from test2)
这样的,意思是一样的
数据库in的用法

IN运算符用于WHERE表达式中,以列表项的形式支持多个选择,语法如下:WHEREcolumnIN(value1,value2,...)WHEREcolumnNOTIN(value1,value2,...)当IN前面加上NOT运算符时,表示与IN相反的意思,即不...

mysql中in这是啥比较运算符?

这是用来查询,在字段条件符合某个集合中任意一个值时,返回这条数据例:whereclass_namein('first','second','third');表示字段class_name中有'first'或者'second'或者'third'中任意一个都符合条件,会被查询出来...

mysql查询语句in和exists二者的区别和性能影响

如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select*fromAwhereccin(select...

mysql查询 怎么使用 in

in作为查询条件,一般典型有两种用法:一是IN常量,例如下面语句查询一、三年级的学生:SELECTFROMstudentWHEREgradeIN('一','三');二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有...

mysql存储过程 in 怎么用

out表示输出的参数,存储过程调用代码需要获得此参数值。in表示输入参数,默认为in例1、一个简单存储过程游标实例复制代码代码如下:DELIMITERDROPPROCEDUREIFEXISTSgetUserInfoCREATEPROCEDUREgetUserInfo(indate...

编程里的in是什么意思

除了在编程中的常用功能,in还有其他的应用场景,如数据库查询、文件读取等。例如,在MySQL中可以使用“WHEREcolumn_nameIN(value1,value2,...)”语句来查询表中等于value1、value2等任意一个值的column_name字段的...

mysql查询语句in和exists二者的区别和性能影响

notin和notexists如果查询语句使用了notin那么内外表都进行全表扫描,没有用到索引;而notextsts的子查询依然能用到表上的索引。所以无论那个表大,用notexists都比notin要快。in与=的区别selectname...

mysql中on,in,as,where如何用,意思是什么?

Where查询条件,on内外连接时候用,as作为别名,in查询某值是否在某条件里

mysql in语句查询

没啥区别其实,都可以正常走索引,非要说的话第一条高点但有限,但如果是id=232orid=233or...和idin(232,233...)这种特别多时,并且id字段没有索引,那么=加上or的效率会远远低于in的效率,如果有索引那基...

mysql查询条件使用=和in的区别

=的速度会略快,用于都单值IN一般是用于多个值的时候比如idin(1,2,3,15,65)

while语句属于什么语句查询语句in怎么用while语句怎么用if语句的用法plsql语句indarlinginthe经典语句sqlin语句只要用心的经典语句用心做事用心待人的句子
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 家用制氧机有作用吗? 09年7月15日安徽卫视午夜影院放的电影叫什么名字?拜托各位大神_百度... ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... ...Mn(CN)4]2- ,题目说磁矩是1.8,它的杂化轨道类型是什么d2sp还是dsp... ...号在最近24小时内绑定过三个,已达到限制,...24小时后可以再次... 上消化道出血的临床表现,出现上消化道出血的处理? 微信手机号在24小时内,已绑定两个,已达到限制,不能在绑定其他微信... 谁可以用符号打个玫瑰出来??? 惠州初三辅导班有哪些 mysql数据库中的存储过程中的in和out是什么 mysql查询 怎么使用 in 五年级下册语文第四单元作文600字现在就要真实的 博客原义是什么? 史铁生是谁 我想学C++!!! 2010国庆见闻 作文 能套用所有主题的作文 以"读书使人.……"为题写一篇6oo字作文 三年级作文”新来的语文老师"1oo字怎么写? 南京艺术学院播音播音怎么招生? 作文一个让我——的日子(急急急急急) 在公文写作里日期里的"零"应该怎么在电脑上打出来。 苹果手机的微信响了但是打开一看什么都没有,怎么回事? 三百九十写作39OO对吗? 高达OO "OO" 到底是读“藕藕”还是读“零零”?、 怎样在微信不显示电话号码 中文歌词里有没有写作OO读作XX的? 为什么日语会出现许多「读作XX写作OO」的情况 写作oo读作XX来自哪部动漫? mysql in 会使用索引吗 在mysql查询中,"="和"in"在什么情况下作用相同 mysql中on,in,as,where如何用,意思是什么? mysql查询in为什么用不上索引 mysql查询中in和多个or的区别 MYSQL 查询语句中in的用法 MySQL的FIND_IN_SET函数使用方法分享 在Mysql5.0 中In 用法的疑惑 mysql百万数据查询 用什么代替in,该如何处理 MYSQL中的IN问题 mysql 用 in 遍历的问题 Mysql数据库中FIND_IN_SET();在HIbernate中怎么使用。比如,如何传参... mysql IN OUT 参数 加法 数据库中in函数可以用什么代替 mysql中not in怎么使用? sql中的not in语句怎样用mysql表示 猴头菇不能和什么一起吃 猴头菇的饮食禁忌 猴头菇与哪些食物相克? 猴头菇能和鸡蛋一起吃吗? 猴头菇不能和什么一起吃