数据库索引添加原则?

amdgaming 2011-08-02 10:12:36
比如我有一张业务主表,字段比较多

现在我有很多报表,我需要按照 某个时间(比如创建时间,分配时间,) 查询 这个时候我加索引

但是这样的情况非常多,我又不能每个报表都加一个索引吧,经验值不是一个表最多5个索引么?

各位有什么好招啊?
...全文
284 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
amdgaming 2011-08-05
  • 打赏
  • 举报
回复
哈哈 没有高人来回答下啊。////
给小弟解迷津啊
sc1234 2011-08-05
  • 打赏
  • 举报
回复
不建议直接业务表作为查询报表的数据源
索引会增加I/O开销
如果不是数据有实时要求 建议刷一张物化视图作为源
上面你加多索引也无关系
springchina_1 2011-08-04
  • 打赏
  • 举报
回复
实际工作中,如果发现查询速度比较慢,则需要查询哪几个字段,就对这几个字段建立索引
会大大加速
amdgaming 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qyweiyy88 的回复:]

索引不是最多建5个,是最好不要超过5个
只要你这5个以上的索引使用率都非常高的话你可以建6个,7个。。。
不过你最好再用下外键,连线等方法试一下
[/Quote]
什么连线 指导下?
amdgaming 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yixilan 的回复:]

建索引呗。
比如说:
A报表,用到TIME1,TIME2,就把这两个字段做为一个索引;
B报表,用到TIME3,TIME4,就把这两个字段做为一个索引;
这都没有问题的。
[/Quote]
但是 还有 C ,D,E F G呢
都建? 还是建一个 包含 各种time的 联合索引,。。。。
yixilan 2011-08-02
  • 打赏
  • 举报
回复
建索引呗。
比如说:
A报表,用到TIME1,TIME2,就把这两个字段做为一个索引;
B报表,用到TIME3,TIME4,就把这两个字段做为一个索引;
这都没有问题的。

ma_mh 2011-08-02
  • 打赏
  • 举报
回复
求解?哪种方法比较有效
lyhmy 2011-08-02
  • 打赏
  • 举报
回复
索引不是可以同时建立在几个字段上的么
yixilan 2011-08-02
  • 打赏
  • 举报
回复
加索引的主要目的,是想加快查询速度,是吧?
创建时间,分配时间,有没有一个主要的键呢?源表有没有按照某个时间建分区?

至于索引,我倒觉得,你把几个主要的时间加上索引,是可以的。建个五六个,都没有关系。
再多了也不好。不能都满足。
BenChiM888 2011-08-02
  • 打赏
  • 举报
回复
看你的描述,如果报表能够直接查询的话看样子数据量不是很大,所以你可以试试下面的方法

调用报表的时候
--重建索引
execute immediate 'create index ...';

报表处理逻辑

--删除原来的索引
execute immediate 'drop index ...';

布丁88 2011-08-02
  • 打赏
  • 举报
回复
索引不是最多建5个,是最好不要超过5个
只要你这5个以上的索引使用率都非常高的话你可以建6个,7个。。。
不过你最好再用下外键,连线等方法试一下
BenChiM888 2011-08-02
  • 打赏
  • 举报
回复
那真是没有好办法了,不想建立太多索引,想不出办法了,等楼下回答。

[Quote=引用 9 楼 amdgaming 的回复:]
你用完就删除,而你建索引也蛮慢的,而且还要写到业务里面。似乎不太好啊
[/Quote]
amdgaming 2011-08-02
  • 打赏
  • 举报
回复
你用完就删除,而你建索引也蛮慢的,而且还要写到业务里面。似乎不太好啊
amdgaming 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 benchim888 的回复:]

组合索引能够用到的规则是必须使用引导列。
如:(a,b,c) 是组合索引的话,A列必须在where条件中使用才可以用到这个索引,只用b或者只用c或者只用b,c 都不可以。
要根据你的实际情况考虑,还是建议你当查询报表的时候 新建索引,查询完毕删除索引。

引用 6 楼 amdgaming 的回复:
引用 5 楼 yixilan 的回复:

建索引呗。
比如说:
A报表,用到TI……
[/Quote]

这样啊,程序逻辑写这个不太好吧。。。。
BenChiM888 2011-08-02
  • 打赏
  • 举报
回复
组合索引能够用到的规则是必须使用引导列。
如:(a,b,c) 是组合索引的话,A列必须在where条件中使用才可以用到这个索引,只用b或者只用c或者只用b,c 都不可以。
要根据你的实际情况考虑,还是建议你当查询报表的时候 新建索引,查询完毕删除索引。

[Quote=引用 6 楼 amdgaming 的回复:]
引用 5 楼 yixilan 的回复:

建索引呗。
比如说:
A报表,用到TIME1,TIME2,就把这两个字段做为一个索引;
B报表,用到TIME3,TIME4,就把这两个字段做为一个索引;
这都没有问题的。

但是 还有 C ,D,E F G呢
都建? 还是建一个 包含 各种time的 联合索引,。。。。
[/Quote]

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧