gpt4 book ai didi

sql - 表索引设计

转载 作者:行者123 更新时间:2023-12-02 20:30:06 25 4
gpt4 key购买 nike

我想向我的表添加索引。我正在寻找如何向表添加更多索引的一般想法。除了PK聚集。我想知道当我这样做时要寻找什么。所以,我的例子:

该表(我们称之为 TASK 表)将是整个应用程序中最大的表。预计有数百万条记录。

重要:大量批量插入正在此表中添加数据

表有 27 列:(到目前为止,并且还在计数:D)

int x 9 列 = id-s

varchar x 10 列

位 x 2 列

日期时间 x 5 列

INT 列

所有这些都是 INT ID-s,但来自通常小于任务表(最多 10-50 条记录)的表,例如:状态表(具有“打开”、“关闭”等值)或优先级表(具有诸如“重要”、“不太重要”、“正常”之类的值)还有一个像“parent-ID”(自ID)这样的列

join:所有“小”表都有PK,通常的方式...集群

字符串列

有一个(公司)列(字符串!)类似于“始终为 5 个字符长”,并且每个用户都将受到使用此列的限制。如果任务中有 15 个不同的“公司”,则登录用户只会看到一个。所以这上面总是有一个过滤器。向该列添加索引可能是个好主意?

日期列

我认为他们不会索引这些......对吧?或者可以/应该吗?

最佳答案

我不会添加任何索引 - 除非您有特定原因这样做,例如性能问题。

为了确定要添加哪种索引,您需要知道:

  • 正在对您的表使用什么类型的查询 - WHERE 子句是什么,您正在执行什么类型的 ORDER BY

  • 您的数据是如何分布的?哪些列的选择性足够(< 2% 的数据)可用于索引

  • 额外的索引会对表中的 INSERT 和 UPDATE 产生什么样的(负面)影响

  • 任何外键列都应该是索引的一部分 - 最好作为索引的第一列 - 以加快与其他表的 JOIN 速度

并且当然您可以为DATETIME列建立索引 - 是什么让您认为不能?如果您有很多查询将通过日期范围来限制其结果集,那么对 DATETIME 列进行索引是完全有意义的 - 也许不是单独索引,而是在复合索引中与表格的其他元素。

您无法索引包含超过 900 字节数据的列 - 诸如 VARCHAR(1000) 之类的内容。

有关索引的深入且知识渊博的背景,请参阅 blog by Kimberly Tripp ,索引女王。

关于sql - 表索引设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com