首页新闻找找看学习计划

sql语句查询优化

0
[待解决问题]

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 的时候很慢,请问有什么好的解决办法?

冲-asp.net的主页 冲-asp.net | 菜鸟二级 | 园豆:202
提问于:2018-08-29 12:46
< >
分享
所有回答(4)
1

买个好服务器,CPU用最好的,内存用最多的,硬盘用最好最快的。

爱编程的大叔 | 园豆:29764 (高人七级) | 2018-08-29 12:49
0

用空间换时间,添加一个字段保存 convert(decimal(18,0),rtrim(convert(char,a.房间代码))+convert(char(6),a.费用月份)+convert(char(2),a.代码)) 的值并在该字段添加索引,在插入与更新时计算字段的值

dudu | 园豆:41311 (高人七级) | 2018-08-29 13:05

或者使用表变量,给表变量添加索引,参考 Creating an index on a table variable

支持(0) 反对(0) dudu | 园豆:41311 (高人七级) | 2018-08-29 14:43
0

select convert(decimal(18,0),rtrim(convert(char,a.房间代码))+convert(char(6),a.费用月份)+convert(char(2),a.代码)) as id 
from 表A as a

 

这个ID,当初创建数据的时候就应该根据规则弄好,后期这样拼很不靠谱,还慢

媳妇儿郭嘉 | 园豆:151 (初学一级) | 2018-08-29 14:13
0

建议创建一个计算列,并在该计算列上创建索引

大豆男生 | 园豆:599 (小虾三级) | 2018-08-29 14:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册