相关疑难解决方法(0)

有多少数据库索引太多了?

我正在开发一个带有相当大的Oracle数据库的项目(尽管我的问题同样适用于其他数据库).我们有一个Web界面,允许用户搜索几乎任何可能的字段组合.

为了使这些搜索更快,我们将索引添加到我们认为用户通常会搜索的字段和字段组合.但是,由于我们并不真正了解客户将如何使用此软件,因此很难确定要创建哪些索引.

空间不是一个问题; 我们有一个4 TB的RAID驱动器,我们只使用了一小部分.但是,我担心索引太多会导致性能损失.因为每次添加,删除或修改行时都需要更新这些索引,我想在单个表上有几十个索引是个坏主意.

那么有多少指数被认为太多了?10?25?50?或者我应该只是覆盖真正的,非常常见和明显的案例而忽略其他一切?

database oracle database-design

108
推荐指数
7
解决办法
4万
查看次数

低选择性色谱柱的索引和替代品

在低选择性色谱柱上选择记录的策略范围有哪些?

一个示例可能是订单表,多年来,您构建了大量已完成的订单,但通常需要选择活动订单.订单可能会经历生命周期,例如放置,库存分配,从仓库中挑选,发送给客户,开具发票和付款.订单可能还会被取消,保留等.大多数记录最终将处于最终状态(例如已付款),但您可能经常需要选择已分配的订单.在这种情况下,顺序读取会很慢.

索引
MySQL的类似问题:低基数/选择性列=如何索引?
索引是否在SQL中吮吸?
什么是索引以及如何使用它们来优化数据库中的查询?
定义索引:哪些列和性能影响?
和其他许多其他相关的因素.

我读过的方法(在stackoverflow和其他地方)包括

  • 使用位图索引
  • 使用部分索引(create index x on t(c2) where c1='a')
  • 使用聚集索引?
  • 不要索引低选择性列,使用顺序读取
  • 对数据进行分区(例如,分成具有相同模式的多个表)
  • 使用补充表(例如 active_customers(customer_id)

我目前的DBMS不支持上面列出的前三个选项,其余的似乎有问题 - 还有其他常用的方法吗?

更新:我见过 - 索引低选择性列,但只选择高选择性值.

sql indexing database-design relational-database

8
推荐指数
1
解决办法
2590
查看次数

向多态表添加多个索引的最佳方法是什么

假设我有与此类似的多态

| document_id | owner_type | owner_id |
| 1           | Client     | 1        |
| 1           | Client     | 2        |
| 2           | User       | 1        |
Run Code Online (Sandbox Code Playgroud)

我知道我会调用查询来寻找owner_typeowner_type+owner_id

SELECT * FROM document_name_ownerships WHERE owner_type = 'Client`
SELECT * FROM document_name_ownerships WHERE owner_type = 'Client` and owner_id = 1
Run Code Online (Sandbox Code Playgroud)

让我们忽略如何索引document_id 我想知道在此 SQL 场景中索引所有者列的最佳方式(性能)是什么

解决方案1:

CREATE INDEX do_type_id_ix ON document_ownerships (owner_type, owner_id)
Run Code Online (Sandbox Code Playgroud)

这样我就只有一个适用于这两种情况的索引

解决方案2:

CREATE INDEX do_id_type_ix ON document_ownerships (owner_id, owner_type)
CREATE INDEX do_type_ix …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing

5
推荐指数
1
解决办法
1162
查看次数

通过BOOLEAN值进行SQL(mySQL)优化

我正在从事一项非常艰巨的项目; 我的问题是关于使用BOOLEAN值来确定是否需要进一步数据处理时获得的效率.

例如:如果我有一张列出所有生物的表格.在另一个关系性的表中列出了他们的冬眠期,以及冬眠期间每天消耗的卡路里.

在(生物)表中包含"hibernates"BOOLEAN的值是否有效.

如果为true,则转到"hibernation_creature_info_relations"表并找到具有该ID的生物并返回该信息.

这意味着对于"hibernates"= false的值的所有生物将阻止SQL必须搜索"hibernation_creature_info_relations"的大表.

或者当使用ID时,如此快速地检查"hibernation_creature_info_relations"表的过程如此快,以至于如果休眠值设置为true或false,必须处理基于hatennation的值的参数,实际上会对性能产生更大的影响. ?

我希望这是足够的信息,以帮助您了解我的要求,如果不是,请让我知道,以便我可以改写或包含更多细节.

mysql sql optimization

4
推荐指数
1
解决办法
354
查看次数