Stu*_*ler 3 sql linq sql-server performance collation
我只想检查几件事:
Q1)Latin1_General_CI_AS 不区分大小写,区分重音:即 SQL 会将以下内容视为相等 - “hello”和“HELLO”
使用 LINQ 我经常安静地做:
db.Where(v => v.Email == "some email".ToLower())
Run Code Online (Sandbox Code Playgroud)
Q2) 假设我对 Q1 的理解是正确的,我只是在浪费处理时间在查询中调用 ToLower() 吗?
Q3) 有没有人知道使用Latin1_General_bin 比Latin1_General_CI_AS 是否会提高性能?即已经在博客等上进行了性能测试(我在写帖子时想到了这一点,所以还没有看我自己)
通常,SQL 比较不区分大小写。
但是也有例外,例如在 MySQL 中,如果您使用binaryvarchar 比较将区分大小写。
所以你的 ToLower 可能不会完全浪费时间。
该Latin1_General_bin区分大小写。
而Latin1_General_CI_AS不是。
区分大小写的比较在数据库中会更快,但是如果您想将“some email”与“Some email”匹配,您将不得不转换为小写,从而失去所有速度增益。
我没有计时,但我认为不值得麻烦。
我建议在此微优化之前巧妙地使用索引和查询。
-- 过早的优化是万恶之源,Donald Knuth。