Mysql使用In查询不走索引总结
简介Mysql使用In查询不走索引总结
表结构
--- 用户表
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`phone` char(11) NOT NULL,
`name` varchar(255) NOT NULL,
`address` varchar(255) NOT NULL,
`email` varchar(50) NOT NULL,
`sex` tinyint(1) NOT NULL,
`birthday` char(10) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=202001 DEFAULT CHARSET=utf8mb4;
---用户资产表
CREATE TABLE `user_assets` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`money` decimal(10,2) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=202001 DEFAULT CHARSET=utf8mb4;
1、in里面值的类型,和查询列定义类型不一致的情况,不走索引
mysql> DESC SELECT * FROM `user` where phone in (15370225886);
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| 1 | SIMPLE | user | NULL | ALL | phone | NULL | NULL | NULL | 201057 | 10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set (0.03 sec)
mysql> DESC SELECT * FROM `user` where phone in ("15370225886");
+----+-------------+-------+------------+-------+---------------+-------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+-------+---------------+-------+---------+-------+------+----------+-------+
| 1 | SIMPLE | user | NULL | const | phone | phone | 44 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+-------+---------------+-------+---------+-------+------+----------+-------+
1 row in set (0.04 sec)
2、in查询更新,更新操作不走索引
mysql> DESC UPDATE `user_assets` SET money = 0 where id in (SELECT id FROM `user` where sex = 1);
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+-------------+
| 1 | UPDATE | user_assets | NULL | index | NULL | PRIMARY | 4 | NULL | 202032 | 100.00 | Using where |
| 2 | DEPENDENT SUBQUERY | user | NULL | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | 10.00 | Using where |
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+-------------+
2 rows in set (0.04 sec)
mysql> DESC UPDATE `user_assets` SET money = 0 where id in (SELECT id FROM `user` where id < 100);
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+--------------------------+
| 1 | UPDATE | user_assets | NULL | index | NULL | PRIMARY | 4 | NULL | 202032 | 100.00 | Using where |
| 2 | DEPENDENT SUBQUERY | user | NULL | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | 100.00 | Using where; Using index |
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+--------------------------+
2 rows in set (0.05 sec)
mysql> DESC UPDATE `user_assets` SET money = 0 where id in (SELECT id FROM `user` where id < 1000);
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+--------------------------+
| 1 | UPDATE | user_assets | NULL | index | NULL | PRIMARY | 4 | NULL | 202032 | 100.00 | Using where |
| 2 | DEPENDENT SUBQUERY | user | NULL | unique_subquery | PRIMARY | PRIMARY | 4 | func | 1 | 100.00 | Using where; Using index |
+----+--------------------+-------------+------------+-----------------+---------------+---------+---------+------+--------+----------+--------------------------+
很多时候我们只希望我们的应用只能启动一次,本文主要介绍下Flutter的windows桌面端如何实现只启动一次的方法。
Python调用WPS把文档转换PDF,并把PDF转图片,首先需要安装WPS,然后利用pypiwin32把文档转化成PDF,再利用fitz、PyMuPD把PDF转化成图片
在前面我们已经介绍了Redis的持久化RDB和AOF。但是很多时候,我们需要考虑很多因素:服务器宕机数据丢失、持久化时的性能开销、持久化文件的大小以及数据恢复速度。RDB持久化,两次快照之间写入的数据可能会丢失,当写入流量较大且数据集也很大时,RDB中系统调用fork()的延迟和内存的开销也是一个问题。但是RDB比AOF文件占用的磁盘空间更小,并且从RDB中恢复数据的速度更快。事实上,我们可以同时启动这两个功能。
dig命令是用于域名查询,可以用于测试域名系统的工作是否正常。如果没有dig命令,请使用:yum install bind-utils 进行安装
快速生成表格
Electron页面跳转、浏览器打开链接和打开新窗口
在Mac电脑中,如何对Git的用户名和密码进行修改呢?起初不懂Mac,所以整了很久,本文将记录如何对这个进行操作,以便后期使用。
在使用Git的过程中,不想每次都输入用户名和密码去拉取代码,所以就需要保存这些信息,那么既然有保存了,就必须有清除功能。
Docker编译镜像出现:fetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gz
ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: temporary error (try again later)
WARNING: Ignoring APKINDEX.2c4ac24e.tar.gz: No such file or directory问题