gpt4 book ai didi

mysql - 索引 MySQL View 的替代方法

转载 作者:行者123 更新时间:2023-11-29 07:07:33 24 4
gpt4 key购买 nike

交易是这样的:

我有一个以这种方式构建的 MySQL 数据库:共有三张表,一张用于“对象”:

ID | Type       | Name        | Description
--------------------------------------------
1 | Restaurant | Joe's Grill | A Great Place

还有一个关于每个“对象”的元数据表,设计如下:

Object ID | Name ID | Description ID
-----------------------------------
1 | 2 | 4

还有另一个元数据字符串表:

ID | String
---------------
1 | Hello
2 | City
3 | London
4 | Paris

所以在这种情况下,Joe's Grill 餐厅(ID:1)附加了一个元数据(您可以通过元数据表的对象 ID 列看到)Name ID 和 Description ID 列对应于元数据字符串表的字符串。

问题是 SELECT 查询每次都需要多个 JOIN,所以我想创建一个自动执行此操作的 View ,问题是我还想要该 View 的索引,因为该 View 将也变得非常大。

问题是:

  1. 我知道不能为 View 创建索引?有替代方案吗?

  2. 如果不是,下一个最佳选择是什么?也许除了 View 之外还有另一种方式从查询中创建表?也许设置一个脚本来执行此操作?

  3. 如果这两个都不可行,我还能做些什么吗?

提前谢谢大家,我真的一直在为这个问题绞尽脑汁很长一段时间。

最佳答案

此模型是实体-属性-值模型或 EAV。它允许无模式模式。因此,很难看出 View 或表如何跟踪这一点,因为新属性需要新列,而数据模式的相对静态性质意味着需要重新创建 View 或表。

当有人使用新名称/值获取对象 1 时,您必须向 View 或表中添加一列。

这种破坏了 EAV 模型的动态特性。

我认为如果您希望将这些元数据项更像传统属性一样对待它们(这就是您使用 View 的方法所暗示的),那么您应该问问自己为什么将这些元数据项放入 EAV 中。

就索引而言,如果您将 ID 设为主键并对其进行索引,您可能会没事。在 SQL Server 中,我可能也会让它们成为 PK 和集群。甚至可能没有任何非聚集索引——这取决于查询。如果你从右到左,即找到所有标有巴黎城市的东西,我的索引可能会有所不同,包括在文本列和实体中的外键(双向索引)上的非聚集索引.不过,这完全取决于我会看到的使用模式。

关于mysql - 索引 MySQL View 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6426924/

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