有5个”or“组成查询,表数据一大就表扫描,性能很差,但业务要求和系统要求这样判断。即使在表中这五个字段都建索引,速度也不会快。太多"OR"了,SQL Server 查询分析器无法优化。
SQL语句这时无法优化了,但是如果重新设计表又对现有系统改变太大了,只有对表进行微调。
讨论两天后,终于达成一致:
1,将一个用户id, 一个机构id,一个岗位id,是否公共存四个字段合并成一个字段中,因为我们系统只记录一个,只要符合一个可以了。在再该字段建立索引,程序在前台传进个字符窜,包含上面四个,然后用in来匹配。
这样重构,速度比以前要快,程序修改也比较少,是一个比较平衡的解决方法。但这不符合数据库的设计范式:一个字段有多个意义。设计数据库时不要使用,
只是在没办法优化的情况可以考虑。