cor*_*ras 4 sql oracle indexing
给定Oracle数据库的以下索引:
CREATE INDEX subject_x1 ON subject (code);
CREATE INDEX subject_x2 ON subject (code, status);
Run Code Online (Sandbox Code Playgroud)
是第一个索引是多余的,可以删除.我们需要做到这一点,因为这是一个相对大的桌子,将不断受到重创.
任何解释或确认这一点的oracle文档都会非常有用.
pax*_*blo 12
与大多数数据库问题一样,它取决于:-)
事实上,在任何情况下都不应该删除它.如果你有一个code在where子句中单独使用的查询,那么由于需要读入较少的索引数据这一事实,使用subject_x1will仍然可能会超越subject_x2.
一个极端的例子,让我们说它code是一个char(2)并且status是一个char(4094)`.如果您有查询:
select code from tbl where code > 'dd' and code < 'gg';
Run Code Online (Sandbox Code Playgroud)
这最有可能导致仅索引扫描,因为绝对没有理由去表.如果您使用subject_x1并且从索引中读取4K块,则每次读取时都可以引入几千个代码.
通过使用subject_x2,每个只读给你一个代码(可能是浪费状态).这是性能上的巨大差异.
但是,我不能强调这一点,衡量,不要猜!
使用两个索引分析您的查询(和更新),以查看哪个更好,并使用代表性数据.如果您发现subject_x1为某些查询提供了更好的性能,请将其保留.它会影响更新/插入速度和存储要求,但您会发现这通常不重要,因为:
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |