gpt4 book ai didi

mysql - 从 MYSQL 数据库中选择最有效的方法是什么,其中列的条件为 NULL,一个 userId 或 userIds 列表

转载 作者:搜寻专家 更新时间:2023-10-30 22:36:26 25 4
gpt4 key购买 nike

我有一个表,其中包含 userId 及其一个具有长文本的属性。如下,

database

该表包含大约 200 万行,需要为给定的 userId 选择行(并且 userId 为 NULL 的所有行)。由于UserId为NULL的行有3种,UserId只有一个值,UserId有多个UserId,用'/'隔开。 (我知道将这些值分开是很好的,并且对表格进行规范化是很好的,但这是要求。)所以我的问题是检索行的合适方法是什么。现在我已经实现了两种方法,

  1. "SELECT * FROM user WHERE userId LIKE '%"+ userId + "%' OR userId is null"
  2. 将 userId 具有值列表的行分隔到另一个表中,并使用 "SELECT * FROM user1 WHERE userId = '"+ userId + "' OR userId is NULL" 从第一个表中检索行然后使用类似查询从第二个表中检索行 ("SELECT * FROM user2 WHERE userId LIKE '%"+ userId + "%'")

Bot 方法具有相同的效率。那么还有其他方法可以做到这一点吗?或者这些方法有什么改进吗?

最佳答案

如果您真的非常坚持按原样保持当前表并故意选择不规范化您的数据库,那么我只能建议创建另一个表来“规范化”您针对此特定查询的“用户”值。创建一个新表,其中包含您当前存储在 UserId 字段中的规范化值,并针对您的特定查询使用该新创建的表。

在这种特定情况下:您可以吃蛋糕也可以吃!您可以开始进行数据库规范化工作,但还没有必要删除当前的 UserId 字段。您需要确保您保持两者(UserId 字段和您新创建的带有 FK 的表)“同步”,但除此之外您应该没问题。您可以“慢慢迁移”到使用新创建的表,当您的应用程序不再依赖于 / 分隔的 UserId 字段时,您可以删除该列到时。同时,您可以为正在处理的新(更)代码(包括当前查询)获得(更好的)规范化数据库的好处。

哦,当然,请确保您新创建的表具有正确的索引,以进一步提高查询的性能。

关于mysql - 从 MYSQL 数据库中选择最有效的方法是什么,其中列的条件为 NULL,一个 userId 或 userIds 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37272105/

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