【发布时间】:2018-06-15 08:29:16
【问题描述】:
我正在建一个表格来管理一些文章:
表格
| Company | Store | Sku | ..OtherColumns.. |
| 1 | 1 | 123 | .. |
| 1 | 2 | 345 | .. |
| 3 | 1 | 123 | .. |
场景
大多数时候公司、商店和 sku 将用于选择行:
SELECT * FROM stock s WHERE s.company = 1 AND s.store = 1 AND s.sku = 123;
..但有时访问表时公司将不可用。
SELECT * FROM stock s WHERE s.store = 1 AND s.sku = 123;
..有时会为商店选择所有文章。
SELECT * FROM stock s WHERE s.company = 1 AND s.store = 1;
问题
如何正确索引表?
我可以添加三个索引 - 每个选择一个,但我认为 oracle 应该足够聪明以重复使用其他索引。
如果 WHERE 条件没有公司,是否会使用索引“Store, Sku, Company”?
如果 WHERE 条件没有公司,是否会使用索引“Company, Store, Sku”?
【问题讨论】:
-
您评估它的方式是获取有代表性的数据负载,在每一列上添加一个单独的索引,然后查看为您的查询生成的计划。
-
如果您构建三个单独的索引,那么 Oracle 只会在极少数情况下将它们组合在一起 - 除非您创建 Bitmap-Indexes,否则它们会被组合在一起。但是,它们还有其他缺点。否则谷歌索引跳过扫描