数据库是DB2,多个索引都有某一个字段,那么DB2会执行那一个呢?

如题所述

解决方法很多!你的两个索引都是复合索引。所以字段的顺序是很重要的,索引的第一个字段是主索引码。索引B+树是根据主索引码构造的。index1(oid,name)和index1(name,oid)有天壤之别。看样子,oid是主码吧,它具有唯一性,所以,根据oid、name、age查询数据时,会优先使用index1(姑且认为index1是(oid,name)形式),在index1中使用oid进行索引页的查找,因为oid值是唯一的,直接就能快速定位,根本用不到name和age。如果oid不是主码,如果仍然使用index1,那么当oid不足以区分表中行的时候,才会使用name和age进一步筛选。当然,上面的内容也不是绝对的,一方面,DB2会对整个数据库收集统计信息,根据表中数据的分布和频率,有可能会选择index2,甚至不使用索引,直接表扫描;另一方面,如果你的查询语句中where后面的条件(谓词)是不可索引谓词(比如oid10),对应的索引同样不可用。针对你的数据库系统到底会使用那个,你可以直接使用explain工具对查询优化过程进行查看。最简单的是事业visualexplain,图形化的,会直观显示优化过程和结果。你的问题属于查询优化的内容,实际上挺复杂的,建议你找些专业的介绍看看。(看你描述似乎不大专业)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-01
现在有一个表中的数据我想更新,假如该字段的值是“123”,我现在想让其变成“0000000000123”我是这样写的:db2 update biaoming set ziduan='0000000000'||ziduan这样写肯定不对,我库中该字段的值全变成了000000000了,请高手指点,谢谢!