我得到了一张实体表,这些实体在任何给定时间都具有三种(可能还有更多)性格特征:
- 状况
- 社会
- 步骤
这些性格特征是什么并不重要,除了它们各自都有一大堆可能采用的不同值,而且它们一次可能只采用一个值。使用这三个字符特征,我想在表格中搜索应与实体一起显示的项目。
例如:当条件为 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')
)
最佳答案
尝试在表中使用索引来优化查询时间。 您还可以使用函数来提供您在 where 子句中使用的结果。
关于mysql - 类似数据建模的实体值属性的查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43478555/