我想建一个索引,3个字段的复合索引,但是要求前面2个字段是唯一的,可以吗?

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
我想建一个索引,3个字段的复合索引,但是要求前面2个字段是唯一的,可以吗?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
在10G上测试了
只要先建立一个3个字段的复合索引,然后建立一个对前面2个字段的unique约束即可
但是不知在9i上是否可以呢?我没有9i的
能帮我测试一下吗?谢谢
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
9i和10G一样
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
你最好想清楚,如果索引用作快速定位数据,前两个列就行了,第三个是多余的。如果此索引用来服务于某个查询,该查询只用到这三个列,那么第三个列在索引中还是有用的。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
对前两个字段加:
CONSTRAINT col_2_u UNIQUE (col_1, col_2)
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
既然前两列是唯一的,个人认为,只创建前两列的唯一约束既可满足需求呀!完全可以不用关心第三列了,呵呵
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 newkid 于 2009-1-21 22:58 发表
你最好想清楚,如果索引用作快速定位数据,前两个列就行了,第三个是多余的。如果此索引用来服务于某个查询,该查询只用到这三个列,那么第三个列在索引中还是有用的。

是的, 楼主须考虑一下 newkid 给的建议.
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层


原帖由 newkid 于 2009-1-21 22:58 发表
你最好想清楚,如果索引用作快速定位数据,前两个列就行了,第三个是多余的。如果此索引用来服务于某个查询,该查询只用到这三个列,那么第三个列在索引中还是有用的。

回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 newkid 于 2009-1-21 22:58 发表
你最好想清楚,如果索引用作快速定位数据,前两个列就行了,第三个是多余的。如果此索引用来服务于某个查询,该查询只用到这三个列,那么第三个列在索引中还是有用的。

我在连接时候是只要用到前2列进行连接,不过我要提取第3列的数据,因为数据量比较大
这样如果3列都在索引上,连接+提取第三列会快很多
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 autumn_leaf 于 2009-1-22 09:49 发表

我在连接时候是只要用到前2列进行连接,不过我要提取第3列的数据,因为数据量比较大
这样如果3列都在索引上,连接+提取第三列会快很多

数据量比较大,究竟是多大,自己做个测试环境模拟一下,就知道了呀!
如果因为提取第三列的数据,就放到索引中。那建议你把表中所有的字段都放入索引中!
我测试数据是100万,前两列加上唯一约束,执行时间几乎感觉不到!
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行