通过具有类别/状态值的列查找表中的数据

时间:2013-04-25 13:05:45

标签: database performance oracle indexing partitioning

假设我们有一个水果,即具有大量读取但也插入但几乎不更新或删除。

我们有2列存储具有少量选项的值。让我们说类别[香蕉,苹果,橙子或梨]和状态[已完成,正在进行,被破坏,被破坏或确定]。
最后,我们有一个列的姓氏所有者。


注:
我有时会按类别和其他状态搜索。
在所有情况下,姓氏将用于搜索 我将始终按类别/状态执行完全匹配,但以姓氏开头。

常见问题:

SELECT * FROM fruit_table WHERE category='BANANA' and last_name LIKE 'Cool%'
SELECT * FROM fruit_table WHERE status='Spoiled'  and last_name LIKE 'Co%'
SELECT * FROM fruit_table WHERE category='BANANA' and last_name LIKE 'smith%'




我如何准备它以便我们的响应时间很短?
一个索引是否有帮助(考虑到列中的值根本没有分散)?是可以在这里帮助位图索引吗?
分区怎么样?

最后,关于标题的道歉,我不知道如何正确地制定它。

1 个答案:

答案 0 :(得分:1)

  • 位图索引极大地帮助了数量有限的项目 可用的选择。
  • 标准的b-tree索引(或SQL Server中的非群集索引)可以正常工作 对于last_name列。
    我会先做那两个,因为它们很容易,然后看看它是如何工作的。

过早优化通常是一种不好的做法。但是,添加索引是快速增加速度的方法,而不需要太多努力。有关Oracle中索引的更多信息,请阅读this question