Linq:SqlFunctions.PatIndex vs string.Contains for string comparisson
相同查询的以下哪个版本的性能会更好:
版本1(string.Contains):
var query = db.Products .Where( p => p.Description.Contains( description ) );
版本2(SqlFunctions.PatIndex):
var query = db.Products .Where( p => SqlFunctions.PatIndex("%" + description + "%",p.Description) > 0 );
我相信版本1在理论上运行得更快。
原因:
- 两个版本最终都会转换为SQL查询。
- 版本1转换为where子句具有“like”运算符的查询
- 版本2转换为具有’PatIndex’function的where子句的查询。
- 我们知道,与大型数据集中的纯’like’运算符相比,SQL中的函数需要更长的时间才能返回结果。