楼主: chao_ping

[精华] 讨论:When To Index And How Index

[复制链接]
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
21#
发表于 2002-5-24 15:41 | 只看该作者
最初由 feng_xin 发布
[B]sql优化主要还是得程序员来做,若DBA来优化的话,一个字, ‘累!', 最好的办法是项目开始以前,DBA给程序员做些SQL优化方面的培训。
DBA要做些参数调整,但往往整体上来说效果不是很明显。 [/B]


1.写SQL是程序员的职责, 优化SQL是DBA的职责, DBA的很大一部分工作量是在这上面.
2.SQL优化涉及太多的数据库知识, 是经验依赖型的工作.
3. 程序员面对的通常是开发数据库, DBA面对的通常是产品数据库.

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
22#
发表于 2002-5-24 17:54 | 只看该作者
毛主席教导我们:
"按照唯物辩证法的观点看来,矛盾存在于一切客观事物和主观思维的过程中,矛盾贯串于一切事物的始终,这是矛盾的普遍性和绝对性。矛盾着的事物及其每一个侧面各有其特点,这是矛盾的特殊性和相对性。矛盾着的事物依一定的条件有同一性,因此能够共居于一个统一体中,又能够互相转化到相反的方面去,这又是矛盾的特殊性和相对性。"
"中国的教条主义和经验主义的同志们所以犯错误,就是因为他们看事物的方法是主观的、片面的和表面的。"[/COLOR]

索引可能引起系统性能下降--即使是针对查询[/COLOR][/FONT][/SIZE]

    索引的本意是为了提高性能的, 但是它也可能引起性能的下降.
    最简单的, 它对增, 删, 改的性能起负作用.
     深入一点, 即使对于查询, 在数据量特别小和特别大的两个极端情况下, 索引一样是不利的.
    再深入一点, 对于一般的系统, 索引一样可能对查询产生负面影响--对数据库内部优化器产生影响, 误导优化器选择不良的执行路径. 具体的说: 索引的存在影响某个路径的cost值, cost的值是优化器作决定的依据. 由于cost取值本身是不准确的, 或者说cost不能100%反映索引对性能的影响, 最终索引的存在有可能反而误导了优化器.举个例子(实际情况要复杂很多的,这里只是做为解释用):

路径a        全表扫描      cost 100
路径b        索引一        cost 50   <--数据库选用了它

增加一个索引
路径c    索引二        cost 45  <---数据库认为它cost小过索引一, 选了它.问题来了,45和50大家都是估计的, 没真正执行前是不知道真正的cost的, 索引二的cost可能是45也可能大于50. 或者说选索引二可能快过选索引一,也可能慢过选索引一.
那还要cost干什么?------cost存在的价值在于大部分情况下他的值的倾向性是对的.数据库根据它作猜测,猜中的机会大于猜错的机会.

什么时候加索引, 如何加?[/COLOR]
    最经典的说法: 数据库慢了, 加索引. 加索引就快了吗?它可能使数据库更慢! 再复杂点,对同一字段, 加bitmap index可能快, 加成b-tree就可能更慢.
    我觉得什么时候加和如何加应该一起考虑的, 以整体性能的变化为判断依据, 某种方式的索引, 加在某个字段上能够引起整体性能变好时加. 加索引没有绝对化的公式, 有的话数据库就自己替你加了. 加索引是一个尝试-->失败-->再尝试的过程, 直至达到预期的目标(优化前要先定下目标,不过这目标可能永远达不到).DBA完成这一过程所需的时间取决于经验.

加索引的步骤  :
1.提取一条SQL作为关键SQL, 尝试加索引(组)以提升性能
2.提取数条关键SQL作为关键SQL组 , 验证1得到的索引(组)对关键SQL组的性能影响(Plan 变化), 正面进行3, 负面返回1
3.扩展关键SQL到全体SQL, 验证1得到的索引(组)对全体SQL的性能影响(Plan 变化), 正面进行4, 负面返回1
4.纪录该索引(组)和它的性能, 不满意或资源足够返回1, 否则进行5
5.对得到的一批索引(组)进行比较, 选取性能最好的.

1可能永远到不了2或5,这时候要进行调整.

加索引要有索引组的概念, 几个索引之间会互相影响的.

使用道具 举报

回复
论坛徽章:
1
参与2007年甲骨文全球大会(中国上海)纪念
日期:2007-08-06 15:19:00
23#
发表于 2002-5-25 12:49 | 只看该作者
In Oracle9i, you can "alter index index_name monitoring"...it's a 9i new feature!!

使用道具 举报

回复
论坛徽章:
4
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB技术丛书作者
日期:2010-09-26 15:24:56
24#
发表于 2002-5-30 14:15 | 只看该作者

Re: 关于利用keep池和recycle

[QUOTE]最初由 biti_rainy 发布
[B]偶觉得这个方法好象并不是普遍适用
有很多难度或者麻烦:



对你上面的提到的几点说说我的看法,呵呵

1:我觉得,这可能是给我们一中想法吧,在一个应用的开发中,作为dba,应当非常了解自己的应用,尤其是了解自己的应用需求和应用特点,同时,有条件的话应当和开发人员有足够的沟通,让开发人员了解一些和他们有关的oracle的特点或其他东西,这样在开发过程中,他们考虑的会更多,dba的工作也更顺利。

2:现状什么样,我不太清楚,但是我觉得的,用与不用哪些oracle的方法恐怕都要测试后才敢在生产机上使用吧,因为甲骨文是买主,他吆喝自己的东西可以这样,可以那样,我们一不改盲从,也不该忽略不记,有条件的话,可以测试一下,当然,对于大多数都公认的我想是可以“拿来主义”的吧,呵呵

3:在9i中可以动态配置parameter,但我还没试过,我想有个印象就好了,等有时间在亲手体会一下,呵呵

4:那为什么你自己试试看,难道你真的觉得oracle的这两个概念没什么用么?(非反问,希望知道结果)

5:tuning我觉得都是相对的,所以,说如果应用中充斥着很多特别复杂的sq l(我觉得特少见,因为可以用procedure了),可能还需要做一下测试,一般的,不用也罢了吧,知道那几点大体规则就可以了吧?(比如说,where,group by, order by后面的字段,顺序问题,选取的数据大于20%等等改建立索引吧,对于小表,OLTP的表加哪些索引估计要慎重了,呵呵,最好先测试)

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2002-5-30 16:27 | 只看该作者

bitbmp?bitbmp是干嘛的,请教请教?

若bitbmp是描述数据分布或索引数据分布,请问如何利用它,更能提高数据的访问速度?

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2002-5-30 16:54 | 只看该作者

如何使用基于函数的索引

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2002-5-31 09:07 | 只看该作者

Re: 楼上的朋友,你有ORACLE 11I 的应验吗?

最初由 oracle8idba 发布
[B]我公司正在做ERP系统,应用产品是RACLE 11i  application.
谁有这方面的应验。和我联系! [/B]




没有!

研究ing

使用道具 举报

回复
论坛徽章:
0
28#
发表于 2002-5-31 10:48 | 只看该作者
which is more effective  in two ways to create index

1.create index table_index on table  (column1,column2,column3)
   tablespace  tablespace1

2.create index table_index1 on table (column1) tablespace tablespace1;
   create index table_index2 on table (column2) tablespace tablespace1;
   create index table_index3 on table (column3) tablespace tablespace1;

使用道具 举报

回复
论坛徽章:
92
2011新春纪念徽章
日期:2011-01-25 15:42:33咸鸭蛋
日期:2012-03-19 10:46:00版主1段
日期:2012-05-15 15:24:11奥运会纪念徽章:排球
日期:2012-08-29 07:02:50奥运会纪念徽章:跳水
日期:2012-09-26 06:44:27ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:击剑
日期:2012-10-12 07:20:332013年新春福章
日期:2013-02-25 14:51:242012新春纪念徽章
日期:2012-02-13 15:13:20
29#
发表于 2002-5-31 13:02 | 只看该作者
en  如果你的where 里面是 where  column1=  and column2= 。。。则用复合索引检索的效率高

使用道具 举报

回复
论坛徽章:
0
30#
发表于 2002-6-5 20:19 | 只看该作者

关于使用index提高性能,让我想起啦,使用fragment合理分配数据的特性。

此特性,虽很少有人使用,
但分配好啦,对大数据量,再使用上多进程扫描,一定提高性能不少。
若建立合理,索引可能都不用啦。

使用道具 举报

回复

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

本版积分规则 发表回复

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