gpt4 book ai didi

mysql - 使用 'Index' 还是使用查询在相关数据库列之间创建连接更好?

转载 作者:行者123 更新时间:2023-11-29 13:54:44 25 4
gpt4 key购买 nike

我想知道在相关数据库列之间创建连接的最佳方法是什么 - 在查询中或使用 Index?我知道使用 Index 的主要问题是性能速度,但我认为这不是问题。

表中的每一列代表各种产品属性,并且许多列通过以下方式之一直接连接到其他一些列(通常为 2 - 3 列):

  1. 同一属性的替代数据类型(即颜色名称 + 显示的十六进制#,或图像名称 + .png 文件名 + 替代值)。这些列中的值代表相同的信息,但格式不同,因此这些值之间存在直接相关性,但值本身并不相同。

  2. 用于对列中的值进行分类的子集。相同的值存在于多个列中(具有父/子或兄弟关系)。 例如,“所有颜色”列被分割为 5 列,表示不同类型的颜色(即深色、浅色、明亮等),并且其中大多数组进一步分割为 3 个类别(按颜色的程度排名)黑暗等)。海军蓝分为 3 列 -“所有颜色”、“深色”和“ gem 色调”。

过去,我只使用 Index 创建表之间的关系(使用外键),但这似乎可以使我不必每次都创建连接它们的语句。

目前我正在使用带有 PDO fetch 语句的 mySql(但我可能会在接下来的 12 个月内切换数据库)

最佳答案

我首先应该澄清查询和索引不是彼此的替代品。

创建表时,会定义列,其中一些列可以定义为外键,与另一个表中的其他列相关。表之间的关系仅对于引用完整性目的有用(如果引擎支持它)。它对于文档目的也很有用,一些查询设计者使用它们来猜测查询中的连接。

索引(或多个索引)有不同的用途。它们告诉数据库创建一个额外的数据结构,用于根据索引列的值加速行检索。

因此,外键定义表之间的关系,查询连接相关表,索引加速查询中的连接、过滤、分组和排序操作。

编辑:表用于表示一种实体类型。因此,我们可以有一个具有两个属性的颜色表:颜色(颜色名称,颜色值)。 Color_value 可以是十六进制字符串或整数表示形式。原则上,我们不会有 rgb(x,y,z) 格式的颜色代码列,因为它总是可以从第一个开始计算。

我们将有另一个表来保存图像列表。但是,颜色表和图像表之间没有关系。

编辑2:第二种类型通常用两个表来表示。第一个表存储典型的层次关系,第二个表告诉每个颜色被标记为哪些类。因此,您提供的示例的关系模型将是:

colors(colorid, color_name, color_value)
color_classes(classid, classname, parentid)
colors_classes(colorid, classid)

e.g.,
(colorid, color_name, color_value) - colors
(1, 'Navy', 'xxx')

(classid, classname, parentid) - color_classes
(1, 'All colors', 0)
(2, 'Dark colors', 1)
(3, 'Light colors', 1)
(4, 'Jewel Tones', 2) -- assuming Jewel Tones is a subdivision of Dark Colors

(colorid, classid) - colors_classes
(1, 4) -- assuming Jewel Tones is a subdivision of Dark Colors

您还应该意识到,递归关系(如 color_classes 中的)在关系模型中没有得到很好的处理,但它们仍然很常见,并且有解决方案来处理它。

最后,我不确定关系模型是否确实最适合您的问题。这将取决于您想要如何使用数据。

关于mysql - 使用 'Index' 还是使用查询在相关数据库列之间创建连接更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16043135/

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