mysql查询区分大小写高性能

 mysql查询默认是不区分大小写的 如:

1
2
3
4
5
6
7

<a href="/tags.php/select/" target="_blank">select</a>  * from  table_name where  a like  'a%'    
 
select  * from  table_name where  a like  'A%'    
 
select * from table_name where a like 'a%'
 
select * from table_name where a like 'A%'

效果是一样的。

要让mysql查询区分大小写,可以:
 

1
2
3
4
5
6
7

select  * from  table_name where  binary  a like  'a%'    
 
select  * from  table_name where  binary  a like  'A%'    
 
select * from table_name where binary a like 'a%'
 
select * from table_name where binary a like 'A%'

也可以在建表时,加以标识
 

1
2
3
4
5
6
7
8
9
10
11

create  table  table_name(   
 
     a varchar (20) binary     
 
)  
 
create table table_name(
 
     a varchar(20) binary 
 
)

测试30W数据

1

SELECT * FROM `tableName` WHERE ( BINARY weixin = 'value' ) LIMIT 1;

不支持索引,查询效率底下,不建议考虑。上面这些sql语句乍看不会有什么问题,但是当表中的数据多了以后,问题就会凸显出来,用不到索引,就会导致查询效率非常低下。

 

 

支持索引,查询效率高(推荐使用)

1

SELECT * FROM `tableName` WHERE weixin = 'value' COLLATE utf8_bin LIMIT 1;

查询分析如下:

通过以上描述可以很清晰的看到两个sql在效率上的根本区别,binary慎用

时间: 2025-01-31 10:39:13

mysql查询区分大小写高性能的相关文章

使MySQL查询区分大小写的实现方法_Mysql

1.一种方法是可以设置表或行的collation,使其为binary或case sensitive.在MySQL中,对于Column Collate其约定的命名方法如下: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *_ci: case insensitive collation,不区分大小写 ########### # Start binary colla

mysql查询区分大小写

Mysql默认查询是不分大小写的,可以在SQL语句中加入binary来区分大小写. binary不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写. SELECT * FROM t_resource_info WHERE binary RESOURCE_FORMAT='SWF'  

MySql查询不区分大小写解决方案(两种)

当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感. 解决方案一: 于是怀疑Mysql的问题.做个实验:直接使用客户端用sql查询数据库. 发现的确是大小不敏感 . 通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的  *_cs: case sensitive collation,区分大小写  

mysql字符串区分大小写的问题

  一.1. CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的: SELECT * FROM TABLE NAME WHERE name='clip'; SELECT * FROM TABLE NAME WHERE name='Clip'; MySql默认查询是不区分大小写的,如果需要区分他,必须在建表的时候,Binary标示敏感的属性. CREATE TABLE NAME( name VARCHAR(10) BINARY

MySQL查询不区分大小写问题

问题描述: 找出用户名id为'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'的用户的数据: select * from usertable where id = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'; 结果出现两条记录.这就奇怪了,id已经设置为主键,怎么会重复呢?难道是MySQL的漏洞.后来发现原来查询出来的两个id的值是不同的,诈一看没什么 区别,仔细看你会发现这两个id只是有一个字母的大小写不同, 这两个id分别为: 'AAMkADExM

详解MySQL查询时区分字符串中字母大小写的方法_Mysql

如果你在mysql有唯一约束的列上插入两行值'A'和'a',Mysql会认为它是相同的,而在oracle中就不会.就是mysql默认的字段值不区分大小写?这点是比较令人头痛的事.直接使用客户端用sql查询数据库. 发现的确是大小不敏感 . 通过查询资料发现需要设置collate(校对) . collate规则: *_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitive collation,区分大小写 *

mysql大内存高性能优化方案

8G内存下MySQL的优化 按照下面的设置试试看: key_buffer = 3840M max_allowed_packet = 16M table_cache = 1024 sort_buffer_size = 32M read_buffer_size = 32M read_rnd_buffer_size = 32M myisam_sort_buffer_size = 256M thread_cache_size = 32 query_cache_size = 256M # Try numb

mysql查询学生成绩及各科成绩的排名

问题描述 mysql查询学生成绩及各科成绩的排名 学生表student有主键id,学号stuNum,姓名stuName, 课程表course有课程名称主键id,cname 成绩表sc有主键id,学生表id,课程表id 班级表class有主键id,班级名称cname,外键gid关联年纪表的id主键 年纪表grade有主键id,年纪名称gname 年纪-课程表gc有主键id,年纪表gid,课程表cid 所有的表主键id都是uuid 现在查询一个学生的各科成绩以及每科的成绩在班级和在年纪的排名,(如可

MySQL 4.1.0 中文参考手册 --- 6.9 MySQL 查询缓存

mysql|参考|参考手册|缓存|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.9 MySQL 查询缓存 从 MySQL 4.0.1 开始,MySQL server 有一个重要的特征:Query Cache. 当在使用中,查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果.如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这