mysql字符串索引与数字索引_×××数字和字符串数字的索引使用情况
准备语句:DROP TABLE ix_test;
CREATE TABLE ix_test
(id_1 varchar(20) NOT NULL,
PRIMARY KEY(id_1));
INSERT INTO ix_test VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11);
mysql会将数字在×××和字符串之间自动转换!
这样下面两条语句的结果是一样的:
SELECT * FROM ix_test WHERE id_1=1;
SELECT * FROM ix_test WHERE id_1='1';
但是在索引使用情况方面,结果就完全不一样了!第一条不使用索引,第二条使用索引!
两条语句,第一条使用了索引,但是扫描了全表,第二条直接索引到数据,只需要读取一行!mysql> explain select * from ix_test where id_1=1;
+----+-------------+---------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+---------+---------+------+------+--------------------------+
| 1 | SIMPLE | ix_test | index | PRIMARY | PRIMARY | 302 | NULL | 11 | Using where; Using index |
+----+-------------+---------+-------+---------------+---------+---------+------+------+--------------------------+
1 row in set (0.00 sec)
mysql> explain select * from ix_test where id_1='1';
+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | ix_test | const | PRIMARY | PRIMARY | 302 | const | 1 | Using index |
+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+
1 row in set (0.01 sec)
但是如果将id_1字段变为×××,后面用×××或者是字符串去匹配都可以使用索引,而且索引直接命中!
所以,多么坑爹的mysql sql优化器,多么痛的领悟!
得出结论,对于where后面字段类型为字符串的数字,如果用×××去匹配(就是不用引号引上数字),则不能由索引直接命中,需要全部扫描。
特别需要注意!
mysql字符串索引与数字索引_×××数字和字符串数字的索引使用情况相关推荐
- Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)
这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...
- 【MySQL】索引原理(三):联合索引(最左前缀原则),覆盖索引,索引条件下推
准备工作,下面的演示都是基于user_innodb表: DROP TABLE IF EXISTS `user_innodb`; CREATE TABLE `user_innodb` (`id` big ...
- 【MySQL系统学习专栏】- 数据表操作 - 表定义选项 - 索引
文章目录 前言 一.索引概述 (一)什么是索引 (二)索引优点 (三)索引缺点 二.索引类型及对应操作 (一)主键索引 (二)普通索引 (三)唯一索引 (四)全文索引 (五)多列索引(组合.复合.联合 ...
- MySQL 为什么用索引,为什么是 B+树,怎么用索引
MySQL 索引 A database index is a data structure that improves the speed of operations in a table. Inde ...
- mysql 一个字段走索引吗_mysql数据库--explain(查询表是否走索引)各个字段含义...
1.1 id列 数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 1.2 select_type列 常见的有: ◆ simp ...
- mysql 有索引 不被使用方法_MySQL教程100-索引在什么情况下不会被使用?
索引可以提高查询的速度,但并不是使用带有索引的字段查询时,索引都会起作用.使用索引有几种特殊情况,在这些情况下,有可能使用带有索引的字段查询时,索引并没有起作用,下面重点介绍这几种特殊情况. 1. 查 ...
- mysql哈希索引 kv_mysql8 参考手册--B树和哈希索引的比较
了解B树和哈希数据结构可以帮助预测对使用索引中的这些数据结构的不同存储引擎执行不同查询的方式,特别是对于MEMORY允许您选择B树或哈希索引的存储引擎. B树索引特征 B树索引可用于使用=.>. ...
- mysql 排序字段 添加索引吗_mysql需要在哪些字段上加索引?
mysql需要加索引的字段:1.经常出现在Where子句中的字段,特别是大表的字段,应该建立索引:2.经常与其他表进行连接的表,在连接字段上应该建立索引:3.分组字段或者排序字段应该创建索引:4.选择 ...
- java 字符串索引从0开始_无限字符串中的字符串的第一个索引-Java
介绍 我有一个无限的字符串.这个字符串的长度在我们的想象中是无限的并且不能被限制,假设我们有一个这样的序列String: "123456789-" 数字9之后的点实际上表示下一个序 ...
- 《MySQL是怎么样运行的》读书笔记一 数据页+索引
登录MySQL cmd命令行中输入:mysql -hlocalhost -uroot -p 之后输入密码. 对于Windows系统来说,默认的用户名是ODBC,你可以通过设置环境变量USER来添加一个 ...
最新文章
- Linux系统之时间管理
- GIT项目管理工具(part5)--查看commit 日志记录
- 如何添加自定义icon
- r语言dataellipse_r – 在ggplot2中微调stat_ellipse()
- 第五十八期:从0到1 手把手教你建一个区块链
- L2-005 集合相似度(STL+暴力)
- linux一些基本知识
- java 省市区三级联动_javaWeb数据库动态加载全国省市区三级联动
- win10动态桌面_需要2020考研倒计时的动态桌面源的亲们在此留言
- 失业一年,学做跨境电商赚了50万,才知道上班是真的耽误赚钱 !
- Spring之声明式事务控制(九)
- JS模拟百度文库评分
- ps人像美白磨皮教程,ps如何修人像美白磨
- python初学者学习简单教程
- 那些年啊 那些事——一个程序员的奋斗史 ——89
- 白盒测试及其基本方法
- 关于STM32的IIC跟EEPROM通信为什么卡死在while(I2C_CheckEvent)的EV6事件还有为什么检测的是标志位及其怎样写等待写入操作完成函数问题跟解决方法
- css3过渡(从一种效果到另一种效果的缓慢过度)
- jfinal java_jfinal 项目启动不了
- surface系列平板电脑属于微型计算机,什么是Surface平板电脑 微软的Surface平板电脑泽怎么样...