查找表的sql性能

标签 sql join enums

我有一个查找表,它是 id-value 对的主表。此表用于存储静态数据,例如:所有国家/地区、货币等。

所以其他表有一个currency_id, country_id。

我有一个复杂的 sql,它返回一堆这样的 id。要获得实际值,有 2 个选项:
1. 使用与查找表的连接
2. 在项目中,之前的开发者实现了一个功能,他有一个国家的枚举类,一个货币的枚举类等。
所以他只是从 sql 结果集中获取 id,并使用 enum 类查找值。他的意见是这样更快。

我当然可以通过放置更快的开始和结束时间来确定,sql join 或 enum 查找。
但是如果不这样做,是否有可能预测哪个会更快?

最佳答案

两个原因:

  • 您有一个查找表来删除数据修改异常。也就是说,只有在查找数据发生变化时,您才能在一处更改数据。现在你必须编译和发布
  • RDBMS 旨在加入。枚举仍然是客户端代码中的 JOIN

  • 笔记:

    您不应该在“One True Lookup table”(OTLT)反模式中使用一个查找表。您只在一张表中存储一个实体。
  • Common Lookup Tables
  • OTLT and EAV: the two big design mistakes all beginners make
  • Google search

  • (2011 年 12 月添加):
  • 如何确保在正确的表中有正确的查找值?
  • 有时您将拥有多个数据库客户端,请勿使用枚举混淆数据

  • 在 DBA.SE 上,不支持枚举或 OTLT:
  • https://dba.stackexchange.com/q/6962/630
  • https://dba.stackexchange.com/q/6987/630
  • 关于查找表的sql性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5373910/

    相关文章:

    php - Laravel 关系 - 尝试获取非对象的属性

    java - 如何检查 Java 中的泛型枚举?

    C++ - 将 decltype 与包含在模板类中的枚举一起使用

    mysql - SQL 中的重复行(链接 3 个表时)

    mysql - 优化查询以不使用文件排序

    sql - 使用 json_extract 查找 JSON 数组中的所有对象

    sql - EXEC sp_who2 - LastBatch?

    php - 如何连接两个分别与另外两个表连接在一起的表

    mysql - 连接三个表以获取标签列表

    ruby-on-rails - 如何将 joins 方法与 first_or_initialize 一起使用而不是 find_or_initialize_by (Rails)?