我有两个数据表,Table1和Table2,Table1记录数的数量级是百万,Table2是千万级。
Table1的字段:
Id 主键
Name
UserId 已建索引Table2的字段:
Id 主键
Table1Id 已建索引
Field1
Field2
......查询语句:
select Table1.Id, Table1.Name, Table2.Id
from Table1
inner join Table2
on Table1.Id = Table2.Table1Id
where Table1.UserId = 9999上述查询没有问题,性能不错
但是一旦在在查询语句的返回列中增加了Table2的其它任何字段,性能就变得很差,比如:select Table1.Id, Table1.Name, Table2.Id, Table2.Field1
from Table1
inner join Table2
on Table1.Id = Table2.Table1Id
where Table1.UserId = 9999而且无论增加的是什么类型的字段,无论其是否有否索引。
请教这是怎么回事,如何解决?
Table1的字段:
Id 主键
Name
UserId 已建索引Table2的字段:
Id 主键
Table1Id 已建索引
Field1
Field2
......查询语句:
select Table1.Id, Table1.Name, Table2.Id
from Table1
inner join Table2
on Table1.Id = Table2.Table1Id
where Table1.UserId = 9999上述查询没有问题,性能不错
但是一旦在在查询语句的返回列中增加了Table2的其它任何字段,性能就变得很差,比如:select Table1.Id, Table1.Name, Table2.Id, Table2.Field1
from Table1
inner join Table2
on Table1.Id = Table2.Table1Id
where Table1.UserId = 9999而且无论增加的是什么类型的字段,无论其是否有否索引。
请教这是怎么回事,如何解决?
解决方案 »
- wpf 动态加载xmal配置文件后查找子控件。FindName
- AjaxPro执行返回null
- 初学ADO.net,遇到一个关于SQLParameter的代码,不懂,求解释。
- 谁知道这句代码啥意思?
- VC++ 的DLL函数 , C#如何传参数
- C#.net 制作图形窗体----急急........... 60分我只有这么多了
- 求C#英文原版经典好书的下载,给所有分
- [C#2005开发的数据库字典管理工具,欢迎大家下载]
- foreach Control有没有办法排序?
- 关于word文档转换成sgml文档的方法
- 关于分布式事务得示:该伙伴事务管理器已经禁止了它对远程/网络事务的支持!(思归求助。)
- 怎么获取导航树节点的字符串?
详情请查看下面网址: http://www.aspxwork.com这是一个C#学习网站 有站长在线答疑
用的是动网新闻。总体感觉还算不错。资料满全的。
最有特点的是有站长在线答疑。感觉满有特色的。
这个索引就没有用。而直接表扫描了。解决方法:
1.把没有加字段的语句执行,并查看执行计划。
2.把加字段的语句执行,并查看执行计划。然后对比两个执行计划,看有什么异同。。一般这样能找出答案并优化。。如果还是没办法的话,
终极解决方案:到Csdn的数据库板块上贴你的问题,那里高手太多了,应该很容易搞定。
select Table1.Id, Table1.Name, Table2.Id
from Table1
inner join Table2
on Table1.Id = Table2.Table1Id
where Table1.UserId = 9999为什么不直接这样呢
select Table1.Id, Table1.Name, Table2.Id
from Table1, table2
where Table1.Id = Table2.Table1Id
where Table1.UserId = 9999
用什么join语句。
select Table1.Id, Table1.Name, Table2.Id
from Table1, table2
where Table1.Id = Table2.Table1Id
where Table1.UserId = 9999
and 不是where
-_-||
谢谢大家,这个问题我想通了,就是我的做法根本就不对,无法优化了,要改条道。
或者先查Table1,查出的结果再获配Tabel2
select Table1.Id, Table1.Name, Table2.Id, Table2.Field1
from Table1
inner join Table2
on Table1.UserId = 9999 and Table1.Id = Table2.Table1Id--如果在table1.userid和Table2.Table1Id有索引的话
--速度一定很快