【问题标题】:SQL indexing for a range范围的 SQL 索引
【发布时间】:2017-08-15 15:09:49
【问题描述】:

我有如下表格


银行 |最小值 |最大值

我必须运行查询以查找最小值小于 5 且最大值大于 5 的所有银行。

在这种情况下我应该如何执行索引? 提前感谢您的任何建议。


我的问题并不是关于何时应该使用索引(考虑这种情况下的检索次数多于插入次数)。鉴于此,索引的最佳方法是什么。我正在考虑在一列上使用聚集索引,在另一列上使用非聚集索引。

【问题讨论】:

  • 这取决于数据大小,如果数据库中有数百万条记录,而您需要 dbms 在短时间内返回结果,那么您最好为 MinValue & 创建索引最大值。作为副作用,更多的索引也意味着更少的修改操作(插入/更新/删除)。
  • 我应该使用聚集索引还是单列索引
  • 这取决于您的数据、执行此查询的频率等等。如果是偶尔查询,返回的行数未知或很大,没有其他字段,不需要索引,表扫描就差不多了。
  • 每个表只有一个聚集索引(记录按此索引物理排序),因此最好将其留给与范围相关的查询最频繁发生的字段。

标签: sql indexing range


【解决方案1】:

如果您不经常在表中插入新行,那么在“值”字段上创建索引将是一个不错的选择,并且会加快查询速度。

如果您对创建索引有疑问,请阅读此内容 When should I create database indexes?

【讨论】:

  • 我的问题并不是关于何时应该建立索引,考虑到这是一个需要建立索引的场景。鉴于此,索引的最佳方法是什么。我正在考虑在一列上使用聚集索引,在另一列上使用非聚集索引。
  • @KItis 这取决于您未来的需求。根据您所描述的任务,在一列上创建非聚集索引就足够了。
【解决方案2】:

MinValue, MaxValue, INCLUDE Bank 上创建索引将涵盖您的查询。

该索引是否应该聚集取决于此问题范围之外的其他因素。

【讨论】:

    猜你喜欢
    • 2014-10-25
    • 2018-03-27
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多