小编典典

决定何时在数据库的表列上创建索引?

sql

我不是分贝的家伙。但是我需要创建表并对它们执行CRUD操作。我很困惑是否应该默认在所有列上创建索引?这是我在创建索引时考虑的理解。

索引基本上包含存储位置范围(存储第一个值的起始存储位置到存储最后一个值的结束存储位置)。因此,当我们在表索引中插入任何值时,列的值需要更新,因为它又有一个值,但是列值的更新不会对索引值产生任何影响。
正确的?
因此,最重要的是,当我的列用于两个表之间的联接时,我们应考虑在联接中使用的列上创建索引,但是可以跳过所有其他列,因为如果我们在它们上创建索引,则在新值时更新索引值将涉及额外的成本被插入列中。
正确的?

考虑这种情况,其中表格mytable包含两个三列,即col1col2col3。现在我们触发这个查询

select col1,col2 from mytable

现在这里有两种情况。在第一种情况下,我们在col1和上创建索引col2。在第二种情况下,我们不创建任何索引。根据我的理解,情况1将比情况2快,因为在情况1中,oracle可以快速找到列内存位置。所以在这里我没有使用任何联接列,但索引仍然在这里有所帮助。所以我应该考虑在这里创建索引吗?

如果我们在上述相同情况下解雇怎么办

select * from mytable

代替

select col1,col2 from mytable

索引对您有帮助吗?


阅读 190

收藏
2021-04-15

共1个答案

小编典典

但是列值的更新不会对索引值产生任何影响。正确的?

否。更新索引列会产生影响。Oracle
11g性能手册指出:

修改索引列的UPDATE语句以及修改索引表的INSERT和DELETE语句所花费的时间比没有索引时要长。此类SQL语句必须修改索引中的数据和表中的数据。它们还会创建其他撤消和重做。


因此,最重要的是,当我的列用于两个表之间的联接时,我们应考虑在联接中使用的列上创建索引,但是可以跳过所有其他列,因为如果我们在它们上创建索引,则在新值时更新索引值将涉及额外的成本被插入列中。正确的?

不仅是插入,还包括任何其他数据处理语言语句。

考虑这种情况。。。索引对您有帮助吗?

关于最后一段,为什么不使用代表性的数据量构建一些测试用例,以便证明或反对关于应该索引哪些列的假设?

2021-04-15