select * from (
select convert(decimal(18,0),rtrim(convert(char,a.房间代码))+convert(char(6),a.费用月份)+convert(char(2),a.代码)) as id
from 表A as a
) as t
where 1=1 and id not in('1181720180803') order by t.id
说明:从表A中查询出来重组了一个ID后,没有索引,导致T表查询加not in 的时候很慢,请问有什么好的解决办法?
买个好服务器,CPU用最好的,内存用最多的,硬盘用最好最快的。
用空间换时间,添加一个字段保存 convert(decimal(18,0),rtrim(convert(char,a.房间代码))+convert(char(6),a.费用月份)+convert(char(2),a.代码))
的值并在该字段添加索引,在插入与更新时计算字段的值
或者使用表变量,给表变量添加索引,参考 Creating an index on a table variable
select convert(decimal(18,0),rtrim(convert(char,a.房间代码))+convert(char(6),a.费用月份)+convert(char(2),a.代码)) as id
from 表A as a
这个ID,当初创建数据的时候就应该根据规则弄好,后期这样拼很不靠谱,还慢
建议创建一个计算列,并在该计算列上创建索引