12
返回列表 发新帖
楼主: jarjar

[FAQ] Sybase公司专家5月23日第一轮的ITPUB答疑问题专贴

 关闭 [复制链接]
论坛徽章:
0
11#
发表于 2007-5-23 14:57 | 只看该作者
最初由 yoptim 发布
[B]only consider on performance tuning one query:
select * from tab1 where f1 = ? and f2 = ?
how to determine the index key order of the composite index  on f1 and f2?  I mean, which one should we used ? index on (f1,f2) or index on (f2,f1) ?  And what should we consider when creating composite index?

select count (distinct f1) from tab1
4

select count (distinct f2) from tab1
3129

Thanks, [/B]


这是一个很具体的问题了,如果要做出分析 希望能够提供一下 f1,f2的字段类型,数据表中的总记录数,以及数据表中f1,f2数值的具体分布情况, 数据表的总宽度(所有字段长度之和) 才能做更精准的判断。

通常来讲,当列f1,f2的数值分布都比较均匀的情况下,可以采用(f2,f1)的方法建立组合索引。

另外,可以通过观察SQL语句的查询计划和执行语句的IO开销来判断那种组合索引对于查询更加有效。

使用道具 举报

回复
论坛徽章:
0
12#
发表于 2007-5-23 15:54 | 只看该作者
最初由 jarjar 发布
[B]msdnchina 问:

SYBASE有什么优化策略?

我使用的是ase1192,感觉很慢.从应用软件调出一张表,需要20秒,此张表有20万行记录.os物理内存2g,sybase占1.4g ,tempdb 4g,default data cache 686m,没有创建命名高速缓存 [/B]


        你这个问题描述的太笼统了,没法具体回答你,是客户端返回慢,还是在服务器上就慢?你的SQL语句的查询计划使用上索引了吗? 。。。。。。

使用道具 举报

回复
论坛徽章:
0
13#
发表于 2007-5-23 16:02 | 只看该作者
最初由 Sybase特约专家 发布
[B]

这是一个很具体的问题了,如果要做出分析 希望能够提供一下 f1,f2的字段类型,数据表中的总记录数,以及数据表中f1,f2数值的具体分布情况, 数据表的总宽度(所有字段长度之和) 才能做更精准的判断。

通常来讲,当列f1,f2的数值分布都比较均匀的情况下,可以采用(f2,f1)的方法建立组合索引。

另外,可以通过观察SQL语句的查询计划和执行语句的IO开销来判断那种组合索引对于查询更加有效。 [/B]


假设表结构,数值分布如下:
col    type     length        count(distint)
f1    char      9                4
f2    int         4                3129
f3    int         4
f4    int         4
f5    char      20
f6    char      20
f7    varchar 12)

又假设f1,f2的数值分布比较均匀,而且只考虑单个查询:
select * from tab1 where f1 = ? and f2 = ?
f1,f2上的index怎么建?为什么?组合index的选择原则是什么?都考虑哪些因素?
在选择index key时,index key的类型,table的总宽度 对index都有什么影响?

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2007-5-23 16:58 | 只看该作者
最初由 yoptim 发布
[B]

假设表结构,数值分布如下:
col    type     length        count(distint)
f1    char      9                4
f2    int         4                3129
f3    int         4
f4    int         4
f5    char      20
f6    char      20
f7    varchar 12)

又假设f1,f2的数值分布比较均匀,而且只考虑单个查询:
select * from tab1 where f1 = ? and f2 = ?
f1,f2上的index怎么建?为什么?组合index的选择原则是什么?都考虑哪些因素?
在选择index key时,index key的类型,table的总宽度 对index都有什么影响? [/B]


根据你的描述,在这种情况下组合索引的列顺序应该没有什么区别。

建立组合索引,组合索引的第一个字段最重要,因为索引结果是B+树。当where子句中出现了索引的第一个字段,那么在正常情况下这个索引就会起作用。如果where子句中只包含组合索引的后续字段而不包含索引的首字段,那么这个查询就不回用到这个索引。

索引列的字段类型不同,索引所占的空间也不同,这也是当具体分析索引有效性的时候需要考虑的一个方面。当然最主要的还是怎么使查询语句能使用到索引,这个是最关键的。

使用道具 举报

回复
论坛徽章:
0
15#
发表于 2007-5-23 18:06 | 只看该作者
最初由 jarjar 发布
[B]stone112692 问:

distinct 和group by 肯定存在效率问题,在什么情况下distinct的效率高,什么情况下group by的效率高?专家快回答啊. [/B]



distinct 与 group by有不同的含义,distinct是以筛选为目的,group by 而是分组汇总的需要,你想怎么比较它们之间的效率呢?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2007-05-16 15:54:56
16#
发表于 2007-5-24 09:49 | 只看该作者
就是比较他们在reove duplicates上面的效率

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2007-05-16 15:54:56
17#
发表于 2007-5-24 09:51 | 只看该作者
不会这样就完了吧?
select distinct column from table name
go
select column from table name group by column
都可以用来reove duplicates,他们之间存在效率问题,专家能帮忙解答一下吗?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表