mysql - 类似数据建模的实体值属性的查询优化

标签 mysql optimization modeling database-normalization entity-attribute-value

我得到了一张实体表,这些实体在任何给定时间都具有三种(可能还有更多)性格特征:

  1. 状况
  2. 社会
  3. 步骤

这些性格特征是什么并不重要,除了它们各自都有一大堆可能采用的不同值,而且它们一次可能只采用一个值。使用这三个字符特征,我想在表格中搜索应与实体一起显示的项目。

例如:当条件为 x1 并且 soc 为 y1 或 y2 并且步骤为任何内容时,显示“Hello”的项目

使用如下所示的(实体-值-属性)数据库建模,以下查询的行为符合我的要求。但是,我怀疑如果我不进行多个子查询,它可能会更有效。是否可以以更好的方式重写它?

SELECT DISTINCT journey_items.id, 
   journey_items.category, 
   therapist_title, 
   therapist_body 
FROM   journey_items 
WHERE EXISTS (SELECT id
    FROM journey_item_display_rules
    WHERE (`journey_item_id` = journey_items.id )
        AND (`category` = 'soc' AND `value` = 'any')
    )
AND EXISTS(SELECT id
    FROM journey_item_display_rules
    WHERE (`journey_item_id` = journey_items.id )
        AND (`category` = 'condition' AND `value` = '38')
        OR (`category` = 'condition' AND `value` = '25')
    )
AND EXISTS(SELECT id
    FROM journey_item_display_rules
    WHERE (`journey_item_id` = journey_items.id )
        AND (`category` = 'step' AND `value` = 'any')
    )

item modeling attribute modeling

最佳答案

尝试在表中使用索引来优化查询时间。 您还可以使用函数来提供您在 where 子句中使用的结果。

关于mysql - 类似数据建模的实体值属性的查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478555/

相关文章:

javascript - Three.js - 使用 scale.set() 缩放模型或增加模型大小?

php - UTC 日期时间转换

web-services - 定时任务 : Web Service query

java - 改进构建过程 Maven 和 SVN

php - Symfony2 应用程序速度慢

UML 状态机子状态转换

java - 如何从JList中选择多个项目并将它们保存到java中单列的MySQL数据库中

java - 如何在 servlet 中获取所选单选按钮的值并将其存储在数据库中?

mysql - 如何只取最后一笔交易来计算 timediff mysql 5.7

Python 机器学习 - 输入分类数据?