sql - 如何决定何时在表列上使用索引

标签 sql sql-server-2008 sql-server-2005 indexing firebird2.5

什么时候应该在表上使用索引?

  • 从多少行索引有意义?
  • 如果我的表有固定行,刚刚编辑的列(不在“where”子句中),即使表只有大约 15 行,索引也有意义?编辑:在这种情况下,非索引选择/读取比索引读取更有效吗?

  • 编辑:
    现在我使用 firebird 2.5,但大部分时间我使用 SQL Server 2005/2008。

    最佳答案

    一般来说,我的索引策略是这样的(我现在只使用 SQL Server - 根据需要适应您自己的数据库系统):

  • 选一个 集群键 - 不是 GUID,也不是 VARCHAR(250)或者什么 - 一个 聚类键是狭窄的、独特的、稳定的、不断增加的——类似于 INT IDENTITY是完美的。使它成为您的聚集主键 -> 为您提供表上的第一个索引
  • 对于用作另一个表的外键的任何列 - 添加索引。它可以是单列索引 - 也可以是复合索引 - 任何最适合您的情况。重要的是外键列是 第一 该索引中的列(如果您使用复合索引) - 否则,JOIN 的好处's 或用于检查参照完整性对您的系统不可用

  • 这就是现在。

    然后:运行您的系统 - 观察和测量 - 建立基线。该应用程序是否足够快?如果是 -> 你完成了 - 回家享受你的业余时间。

    如果不是:然后开始收集数据并说明应用程序速度不够快的原因。看看例如SQL Server 中的 DMV 之类的东西会告诉您性能最差的查询,或者缺少索引 DMV。分析那些。看看你可以改进什么。添加 一次一个索引 再一次:观察,测量,与您的基线进行比较。

    如果您有改进 -> 保留该指数,此衡量标准是您的新基准。冲洗并重复,直到您(和您的用户)对应用程序的性能感到满意(然后回家享受您的休息时间)。

    SQL Server 中的过度索引可能是 更糟比没有任何索引。不要从太多的索引开始!只立聚集 PK 和外键非聚集索引 - 这就是全部 - 然后观察、测量、优化和重复该循环。

    关于sql - 如何决定何时在表列上使用索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11984636/

    相关文章:

    java - 使用sql server从jdbc中的结果集中转到最后一行

    sql - 默认情况下在sql datetime列中插入空/空值

    sql - 如何向数据库中的所有日期时间列添加一天?

    sql-server - SQL Server : Drop Table with FK

    sql - 检查整数是否在一系列列值之间

    mysql - SQL Server 2005/2008 - 通过命令行导入固定宽度的文本文件?

    sql-server - 如何创建基于 2 列的 SQL 唯一约束?

    sql - 删除 ORACLE 服务器中的保存点

    mysql - 使用连接表在 Pivot MySQL 中进行错误分组

    sql - DBeaver SQL Server GO 无效