![]() |
1
2
我把搜索性能计数器保存在一个表中。基本上监视搜索筛选的行的平均百分比和运行时。 然后根据 TotalNumberOfRowsToSearch*不匹配的百分比/RunTimeInSeconds 这个数字是每秒可以过滤掉的行数的直接关联。平均上千次,这是一个相当好的预测。 然后,我按照最高性能图1的顺序运行每个查询。 如果对总结果执行逻辑和,则仅对上一个查询的结果运行每个后续查询。 如果要执行逻辑“或”,请仅对合并的先前搜索结果以外的结果运行每个后续查询。 这样做,查询将根据索引和数据类型进行更改。 如果您想要一个动态性较低的解决方案,只需计算搜索每个部分的性能数字,然后首先使用性能较好的部分。记住,一个运行时间为55ms但与99%的结果匹配的查询不如运行时间为1秒且与1%的结果匹配的查询有用,所以要小心,结果可能与您最初的想法相悖。 计算性能数据时,请注意除以0的误差。 |
![]() |
2
2
我使用Linq的方法是建立一个where表达式的列表来构造复杂的条件,并最终将它们一起应用。 像这样的:
最终,在构建表达式列表之后,应用表达式:
您还可以在排序方法中提供灵活性,并允许分页:
在哪里?
|
![]() |
3
0
如果你能用ICriteria,我推荐。它可以大大减少复杂搜索的代码量。例如,单独使用一个搜索与在聚合搜索中将其用作子查询之间的区别是添加了投影。 我还没有试着把复杂的搜索分开,单独运行它们。根据您的第二个示例,将整个搜索组合到对数据库的一个调用中,到目前为止对我很有用。如果我没有得到一个合适的响应时间(分而不是秒),数据库引擎优化顾问已经证明了它的宝贵的索引和统计建议。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |