免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1656 | 回复: 8
打印 上一主题 下一主题

SELECT 语句问题, 请高手指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-21 00:58 |只看该作者 |倒序浏览
在SYBASE中,  当做多表连接查询时,  FROM后的表名顺序和WHERE子句的条件顺序对查询性能有何影响. 该怎样做能使查询得到优化?

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2005-12-21 20:07 |只看该作者
好像应该没有关系,sybase优化器会自动选择连接方法的。可以通过showplan 看到查询计划。

关键是索引使用的问题。

论坛徽章:
0
3 [报告]
发表于 2005-12-22 11:23 |只看该作者
个人感觉sybase的查询计划制定不太好,明明字段上有索引,它偏偏不用,真是奇了怪了

[ 本帖最后由 biti_flyingpig 于 2005-12-22 11:24 编辑 ]

论坛徽章:
4
2015年亚洲杯之阿联酋
日期:2015-03-10 10:32:022015年亚洲杯之阿曼
日期:2015-03-10 14:53:222015亚冠之水原三星
日期:2015-07-18 15:40:262015亚冠之塔什干棉农
日期:2015-07-27 20:52:05
4 [报告]
发表于 2005-12-22 11:32 |只看该作者
query plan is not just depend on whether there are indexes,while many factors can affect it

[ 本帖最后由 1017of 于 2005-12-22 12:18 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2005-12-22 11:43 |只看该作者
太高深了。有没有详细点的啊

论坛徽章:
1
2017金鸡报晓
日期:2017-01-10 15:19:56
6 [报告]
发表于 2005-12-22 12:34 |只看该作者
1017of 说的好呀!打个比方
在表a上有字段 a,b,c,d, 索引为 (a,b)
select * from a where c='@@'  and d='00'
或者 where b='000' and c='000'  就没办法使用索引呀。

[ 本帖最后由 chuxu 于 2005-12-22 12:43 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2005-12-22 18:25 |只看该作者
是这样的,  在ORACLE中(在基于规则的优化器中):
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.当ORACLE处理多个表时, 会运用排序及合并的方式连接它们.首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并.


WHERE子句中的连接顺序
ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾.

所以想问一下在SYBASE情况又怎样?

论坛徽章:
0
8 [报告]
发表于 2005-12-22 21:19 |只看该作者
在表a上有字段 a,b,c,d, 索引为 (a,b)
select * from a where c='@@'  and d='00'
或者 where b='000' and c='000'  就没办法使用索引呀。

这个当然,可是我曾遇到过这样的情况:
在表a上有字段 a,b,c,d, 索引为 (a,b)
select * from a where a='000' and b ='000'
plan里却显示没用上索引

论坛徽章:
0
9 [报告]
发表于 2005-12-22 21:56 |只看该作者
如果记录很少的情况,好像是不用索引的。我碰到的情况是select * 的时候是使用索引的,但是使用 count(column) 后就执行全表检索了,后来在select中强制写明使用的index才ok。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP