我的数据库中有一个字段,大多数情况下,区分大小写并不重要。
但是在某些特定情况下并非如此。
所以我看到的选项是,将BINARY关键字添加到查询
select id from table where BINARY fieldname= 'tesT'
或更改表格以使其成为区分大小写的字段。
问题是,使用BINARY关键字会导致查询产生额外开销,还是可以忽略不计。
(它实际上将用于更新where语句)
update table set field='tesT' where BINARY anotherfield='4Rtrtactually '
答案 0 :(得分:1)
在类似SO question中建议使用二进制简短答案,但是开销是否可以忽略不计取决于其他部分。
第一部分是你如何定义微不足道的。如果你的意思是性能,那么定义你的可忽略的阈值返回时间,并尝试使用二进制选择,而不是使用二进制来查看你得到的返回时间(这些情况需要的情况下无关紧要)。通过做一个解释来解决任何差异。
第二部分取决于表的大小以及where子句列的索引方式。一般来说,行数越多,任何差异就越明显。因此,如果您正在查看表中的十条记录,那么在您执行单个表更新时可能没有任何结果。一千万条记录就更有可能引人注目。
第三部分基于Yann Neuhaus在MSQL 5.7 reference guide中的评论。它可能取决于您放置二进制关键字的确切位置。假设他的发现是准确的,那么将二进制数放在等于的恒定值上可能更快(或至少不同)。因此,请将您的更新重写为:
update table set field='tesT' where anotherfield = BINARY '4Rtrtactually '
老实说,我对第三部分有疑问,但我看到了更奇怪的MySQL魔法。有点好奇,如果你测试一下你的场景会得到什么结果。
最终部分可能是您正在使用的排序规则类型。根据您的问题,您似乎使用不区分大小写的排序规则。根据您使用此数据的方式,您可能希望查看区分大小写或二进制排序规则。这个SO question在这个问题上对我很有教育意义。