![]() |
1
1
没有一个简单的“是/否”答案——这是一种平衡行为,因为存在许多性能问题。 与指数相关的两个主要成本必须与收益平衡。
当查询有更多的索引时,还有一个很小的开销,因为查询被优化了。 好的索引的主要好处是,当索引可以很好地使用时,在选择数据方面的性能大大提高。 如果您的表不是非常易变的,并且经常使用索引可以帮助的条件进行搜索,那么创建复合索引可能是有意义的,假设磁盘空间不是问题。 如果您的表非常不稳定,或者某个特定的索引很少被使用(但在使用它的少数情况下是有益的),那么您可能应该权衡一个较慢查询的几乎一次性的成本与存储和维护索引的成本,以备少数情况下使用它。 有一本关于索引设计主题的好书: Relational Database Index Design and the Optimizers 由Lahdenm_¥ki和Leach(它也相当昂贵)。 在最近的评论中,弗兰克说:
弗兰克的这一附加评论在这个问题的背景下更有意义,因为这是一个延续。
显然,除非SQL语句强制Informix进行排序,否则一旦有了结果,它就会立即提供结果;总是这样。这个
准备好查询后,您将得到可能返回多少行的估计值—您可以将其用作指示器(一些、相当多、非常多)。另外,您可以快速独立地发现正在搜索的主表中的行数。鉴于此元数据,您当然可以使用滚动光标技术在数据库中为您提供一个后备存储,其中包含您感兴趣的行的主键值。在任何时候,您都可以为一组有趣的行加载一个带有显示数据的数组,以便向用户显示。根据用户的请求,您可以安排显示另一个充满信息的页面。在程序的某个时刻,您会发现您已经到达滚动光标中数据的末尾。很明显,如果你最后一个抓到,你就强迫它发生。如果您只需要再做一些提取nexts,那么您最终会得到一个未找到的条件。 从80年代后期开始,Informix(ID及其先前的化身,在线、turbo、se和i4gl)就可以实现所有这一切。第一行优化是最新的;它仍然只是优化器的一个提示,通常对优化器所做的工作没有什么影响。 |
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |