MySQL索引使用:字段为varchar类型时,条件要使用''包起来

结论:

当MySQL中字段为int类型时,搜索条件where num=‘111‘ 与where num=111都可以使用该字段的索引。
当MySQL中字段为varchar类型时,搜索条件where num=‘111‘ 可以使用索引,where num=111 不可以使用索引

验证过程:

建表语句:

CREATE TABLE `gyl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `str` varchar(255) NOT NULL,
  `num` int(11) NOT NULL DEFAULT ‘0‘,
  `obj` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `str_x` (`str`),
  KEY `num_x` (`num`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

  向表中使用自复制语句插入数据

insert into gyl (`str`,`num`)values(123123,‘12313‘);

insert into gyl (`str`,`num`) select `str`,`num` from gyl;

更改数据 update gyl set num=id,str=id

结果:

mysql> explain
select * from gyl where str=123123 limit 1;
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | gyl   | ALL  | str_x         | NULL | NULL    | NULL | 262756 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
1 row in set
mysql> explain select * from gyl where str=‘123123‘ limit 1;
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------------+
| id | select_type | table | type | possible_keys | key   | key_len | ref   | rows   | Extra       |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------------+
|  1 | SIMPLE      | gyl   | ref  | str_x         | str_x | 257     | const | 131378 | Using where |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------------+
1 row in set

mysql> explain select * from gyl where num=‘12313‘ limit 1;;
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
| id | select_type | table | type | possible_keys | key   | key_len | ref   | rows   | Extra |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
|  1 | SIMPLE      | gyl   | ref  | num_x         | num_x | 4       | const | 131378 |       |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
1 row in set

1065 - Query was empty
mysql> explain select * from gyl where num=12313 limit 1;
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
| id | select_type | table | type | possible_keys | key   | key_len | ref   | rows   | Extra |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
|  1 | SIMPLE      | gyl   | ref  | num_x         | num_x | 4       | const | 131378 |       |
+----+-------------+-------+------+---------------+-------+---------+-------+--------+-------+
1 row in set

  

MySQL索引使用:字段为varchar类型时,条件要使用''包起来

原文地址:https://www.cnblogs.com/jixingke/p/8486075.html

时间: 2024-11-07 12:43:30

MySQL索引使用:字段为varchar类型时,条件要使用''包起来的相关文章

吐槽 MySQL数据库jdbc操作,varchar类型占位符问题——单引号造孽

很长时间不写代码动手能力明显下降很多常见的错误还是经常发生,今天吐血了一次. 简单的坑总是要多跳几次才能甘心.很清晰的记得大学的时候在此坑差点闷死,现在又跳进这个坑了,搞了半天终于知道错在哪里. String sqlString = "insert into cryptcontent(content,assistentContent) value('asf','asfd')"; DBHelper.insertQuery(sqlString); 这样操作可以的.因此占位符应该也没问题,前

EntityFrame Work 6 Code First 配置字段为varchar 类型

EntityFrame Work 6 配置字符串属性是否支持Unicode 内容 默认情况下,字符串为Unicode(SQLServer 中的nvarchar).您可以使用IsUnicode 方法指定字符串应为varchar 类型. modelBuilder.Entity<Department>() .Property(t => t.Name) .IsUnicode(false);

mysql数据类型之char和varchar类型

在mysql数据库系统中,char和varchar是非常常见的,它们两个也非常的相似,都是用来保存相对较短的字符串,如保存文章标题.留言.email.用户名等.二者的主要区别在于存储方式: char列长度是创建表时声明的长度而且固定不变,长度被限制在0到255之间.一般在数据库设计时,用户保存密码.姓名.IP信息时,由于基本长度都有所固定,用此类型比较合适. varchar列中的值是可变长度字符串,长度也为0-255,在5.0.3之后长度延长到65535. 在查询显示数据的时候,char会删除字

percona-toolkit在线添加删除mysql索引、字段(不锁表)

1.安装配置  yum install perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-DBI perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y  cd /root/soft  tar zxvf percona-toolkit_2.2.11.tar.gz  cd percona-toolkit-2.2.11  perl Makefile.PL  make  make install 2

数据查询优化之mysql索引

为什么要建立索引: 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行,还需要考虑每次读入数据页的IO开销.而如果采取索引,则可以根据索引指向的页以及记录在页中的位置,迅速地读取目标页进而获取目标记录. 使用索引需要注意: ⑴只对WHERE和ORDER BY需要查询的字段设置索引,避免无意义的硬盘开销: ⑵组合索引支持前缀索引: ⑶更新表的时候,如增删记录,MySQL会自动更新索引,保持树的平衡:因此更多的索引意味着更多的维护成本

mysql索引需要了解的几个注意

板子之前做过2年web开发培训(入门?),获得挺多学生好评,这是蛮有成就感的一件事,准备花点时间根据当时的一些备课内容整理出一系列文章出来,希望能给更多人带来帮助,这是系列文章的第一篇 注:科普文章一篇,大牛绕道 索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据. 大多数MySQL索引(PR

MySQL 索引总结

1.索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行. 表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据. 大多数MySQL索引(PRIMARY KEY.UNIQUE.INDEX和FULLTEXT)在B树中存储.只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引. 2.索引好复杂,我该怎么理解索引,有没一个更形象点的例子?

Java 操作MySQL数据库存取图片以及其它类型文件

一.需要注意的一个问题 1.当数据库字段为blob类型时,必须使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法: 2.当数据库字段为longblob类型时,必须使用PreparedStatement中的setBinaryStream(int,InputStream,long)方法. 否则就会抛出如题的错误: Exception in thread "main" java.lang.AbstractMethodErro

关于MySql里的字段

关于MySql里的字段     类型值 类型描述 MYSQL_TYPE_TINY TINYINT字段 MYSQL_TYPE_SHORT SMALLINT字段 MYSQL_TYPE_LONG INTEGER或INT字段 MYSQL_TYPE_INT24 MEDIUMINT字段 MYSQL_TYPE_LONGLONG BIGINT字段 MYSQL_TYPE_DECIMAL DECIMAL或NUMERIC字段 MYSQL_TYPE_NEWDECIMAL 精度数学DECIMAL或NUMERIC MYSQ