回答

收藏

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

技术问答 技术问答 91 人阅读 | 0 人回复 | 2023-09-14

我不是分贝家伙。但我需要创建表格并执行它们CRUD操作。我很困惑是否应该默认在所有列中创建索引?这是我在创建索引时考虑的理解。
0 ]; P8 o4 E5 Y# M3 E, @' K9 ^索引基本上包含存储位置范围(从第一个值的开始存储位置到最后一个值的结束存储位置)。因此,当我们将任何值插入表索引时,列值需要更新,因为它有另一个值,但列值的更新不会对索引值产生任何影响。
( G: B# e) S! _; \3 }$ E4 Z0 S正确的?4 t% S" x  h! d9 ~& \! G
因此,最重要的是,当我的列用于两个表之间的连接时,我们应该考虑在连接中使用的列上创建索引,但我们可以跳过所有其他列,因为如果我们在它们上创建索引,在新值中更新索引值将涉及额外的成本。
! D" _' |8 Q& I. `正确的?
3 |* k  N9 n( |% Z: Q9 |& O考虑到这种情况,表格mytable包括两个三列,即col1,col2,col3。现在我们触发这个查询  T1 J) V& D% c+ [1 Y/ O
select col1,col2 from mytable这里有两种情况。在第一种情况下,我们是col并创建索引col2.在第二种情况下,我们不创建任何索引。根据我的理解,情况1会比情况2快,因为情况1,oracle您可以快速找到列内存位置。所以我在这里没有使用任何连接列,但索引仍然有帮助。那么我应该考虑在这里创建索引吗?& e% w9 ^6 B0 @
如果我们在上述相同情况下解雇,我们该怎么办?
4 C9 l' H. ~( b8 v; Q7 [& Kselect * from mytable代替/ J/ r" K- Z% b
select col1,col2 from mytable索引对你有帮助吗?
) m2 @. b8 \( z9 Y2 s                                                               
3 m5 n' p( [1 ?9 v3 Y" }* t5 W3 |4 c    解决方案:                                                                ' f* e4 @) Y" v7 H0 Z7 g  ~
                                                                但列值的更新不会对索引值产生任何影响。正确吗?8 c! i$ {# h" Z
否。更新索引列会产生影响。Oracle
( r6 M7 }- `3 y( t1 t, {11g性能手册指出:. t' o: D$ K* u' `& Q" q
修改索引列UPDATE修改索引表的语句和语句INSERT和DELETE语句的时间比没有索引的时间长。这种语句需要更长的时间。SQL索引中的数据和表中的数据必须修改语句。它们还将创建其他取消和重做。
9 t4 i  j6 c/ Y5 ?/ p5 D  z2 V2 D5 N因此,最重要的是,当我的列用于两个表之间的连接时,我们应该考虑在连接中使用的列上创建索引,但我们可以跳过所有其他列,因为如果我们在它们上创建索引,在新值中更新索引值将涉及额外的成本。正确的?
( M8 C+ t0 A- L( d' P不仅是插入,还有其他数据处理语言语句。
8 f* k' Z/ k: _% b& A考虑这种情况。。。索引对你有帮助吗?
6 Q: R; ?5 M, x) b( c关于最后一段,为什么不使用代表性数据来构建一些测试用例来证明或反对应该索引哪些列的假设?
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则