我不是db guy.但我需要创建表并对它们执行CRUD操作.如果我默认在所有列上创建索引,我会感到困惑吗?这是我在创建索引时考虑的理解.
索引基本上包含内存位置范围(第一个值存储的起始内存位置到存储最后一个值的最终内存位置).因此,当我们在表索引中插入任何值时,需要更新列,因为它还有一个值,但列值的更新不会对索引值产生任何影响.对?所以底线是当我的列用于两个表之间的连接时,我们应该考虑在连接中使用的列上创建索引,但是可以跳过所有其他列,因为如果我们在它们上创建索引,则会在新值时涉及更新索引值的额外成本插入列中.对?
考虑这种情况,其中表格mytable包含两个三列,即col1,col2,col3.现在我们解雇这个查询
select col1,col2 from mytable
Run Code Online (Sandbox Code Playgroud)
现在这里有两种情况.在第一种情况下,我们在col1和上创建索引col2.在第二种情况下,我们不创建任何索引.**根据我的理解案例1将比case2快,因为在案例1中我们oracle可以快速找到列内存位置.所以这里我没有使用任何连接列,但仍然索引在这里帮助.那么我应该考虑在这里创建索引吗?**
如果在上面的相同场景中,如果我们开火了怎么办
select * from mytable
Run Code Online (Sandbox Code Playgroud)
代替
select col1,col2 from mytable
Run Code Online (Sandbox Code Playgroud)
索引会在这里帮忙吗?