首页 新闻 搜索 专区 学院

数据库50万数据以上 性能问题?优化 where 1=1 and In ('Id0','Id1','Id2')

1
悬赏园豆:15 [待解决问题]

 select * from table where 1=1 and  line In ('Id0','Id1','Id2')

前提数据量在100万以内!

  请各位Sql性能高手帮忙给点方案!谢谢..

问题补充:

索引是当然的!不只是一张表!涉及到三张表的条件过滤!Join连接查询后带条件!三张表一共有20来个字段都可以过滤! 所以我现在就是这样做的

Select tab1.lineId,tab2.line,tab3.line Form tab1

inner join tab2 on tab1.lineId=tab2.lineId

inner join tab2 on tab1.lineId=tab3.lineId

Where tab1.lineId in( Select tab1.lineId From tab1 Where tab1line in('...','...') and tab2lin in ('....') and tab3lin in(...)

)

tab1.lineId上有建索引...

请问:是否Exists效率高一点呢?

恶人鱼的主页 恶人鱼 | 初学一级 | 园豆:164
提问于:2011-08-30 23:05
< >
分享
所有回答(5)
0

可以考虑在line建索引。

邀月 | 园豆:25375 (高人七级) | 2011-08-31 09:38
一个列表查询有15列可以过滤的样子..只对表的主键做了索引呀!然后我查询出的数据关联从表有15个要做一个结果集查询出来...
支持(0) 反对(0) 恶人鱼 | 园豆:164 (初学一级) | 2011-08-31 21:28
你这样的结果说明业务逻辑有问题,理论上这个是没有好的解决方案的。
支持(0) 反对(0) 邀月 | 园豆:25375 (高人七级) | 2011-09-02 16:38
0

同上

班级中队长 | 园豆:94 (初学一级) | 2011-08-31 11:48
那就同上吧..呼呼
支持(0) 反对(0) 恶人鱼 | 园豆:164 (初学一级) | 2011-08-31 21:29
0

你还是在程序里面用缓存。。。

顾晓北 | 园豆:10219 (专家六级) | 2011-08-31 12:23
嗯,有用;但我这里不是做数据显示;是其它用!呼呼
支持(0) 反对(0) 恶人鱼 | 园豆:164 (初学一级) | 2011-08-31 21:29
0

100W建个索引差不多了,你这是小数据量,没必要优化什么

dearz | 园豆:588 (小虾三级) | 2011-08-31 14:55
一个列表查询有15列可以过滤的样子..只对表的主键做了索引呀!然后我查询出的数据关联从表有15个要做一个结果集查询出来... 从表最多的数据有4ooW 有六个表的数据上了30W...(一下查出15个表Top 10000 的数据就有点慢了)现在优化后5分钟的样子
支持(0) 反对(0) 恶人鱼 | 园豆:164 (初学一级) | 2011-08-31 21:32
不要用IN
请问:是否Exists效率高一点呢?

用EXISTS高很多效率,
如果做了索引, 那就只能在查询上面做优化了,
减少子查询, 不要用IN,
支持(0) 反对(0) dearz | 园豆:588 (小虾三级) | 2011-08-31 22:07
0

尽量少用子查询,Exists比In的效率高很多

General Tao | 园豆:200 (初学一级) | 2011-08-31 22:13

测试过了,效率差不多!几秒钟的样子...

支持(0) 反对(0) 恶人鱼 | 园豆:164 (初学一级) | 2011-08-31 22:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册