小编典典

使用SQL排序规则影响性能

sql

我只想检查几件事:

Q1)Latin1_General_CI_AS不区分大小写,区分口音:即SQL将以下内容等同-“ hello”和“ HELLO”

有了LINQ,我经常安静地做:

db.Where(v => v.Email == "some email".ToLower())

Q2)假设我对Q1的理解是正确的,是否只是在浪费查询时间来调用ToLower()?

Q3)有人知道使用Latin1_General_bin而不是Latin1_General_CI_AS是否会提高性能?也就是说,已经在博客等上进行了性能测试(我在写帖子时已经想到了这一点,所以还没看过我自己)


阅读 148

收藏
2021-04-22

共1个答案

小编典典

通常,SQL比较不区分大小写。
但是也有例外,例如在MySQL中,如果您使用binaryvarchar,比较将区分大小写。

因此,您的ToLower可能不会完全浪费时间。

Latin1_General_bin区分大小写。
Latin1_General_CI_AS不是。

区分大小写的比较将在数据库中更快地进行,但是如果您要将“某些电子邮件”与“某些电子邮件”匹配,则必须付出一定的代价,您必须将其转换为小写字母,从而失去所有的速度提升。
我没有计时,但我认为这不值得麻烦。
我建议在此微优化之前明智地使用索引和查询。

-过早的优化是万恶之源,Donald Knuth。

2021-04-22