我只想检查几件事:
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是否会提高性能?也就是说,已经在博客等上进行了性能测试(我在写帖子时已经想到了这一点,所以还没看过我自己)
通常,SQL比较不区分大小写。 但是也有例外,例如在MySQL中,如果您使用binaryvarchar,比较将区分大小写。
binary
因此,您的ToLower可能不会完全浪费时间。
该Latin1_General_bin区分大小写。 而Latin1_General_CI_AS不是。
Latin1_General_bin
Latin1_General_CI_AS
区分大小写的比较将在数据库中更快地进行,但是如果您要将“某些电子邮件”与“某些电子邮件”匹配,则必须付出一定的代价,您必须将其转换为小写字母,从而失去所有的速度提升。 我没有计时,但我认为这不值得麻烦。 我建议在此微优化之前明智地使用索引和查询。
-过早的优化是万恶之源,Donald Knuth。