具有许多where条件的查询性能

hmtdttj4  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(271)

假设有一张table是这样的:
名称|日期|值1 |值2 |值3 |…|value100 varchar | date | float | float | float | float。。。
我可以用它来选择语句,并使用where value1>n,或者使用where value1>n和value2=n。
但是,如果我想包含最多包含100个条件的查询,以便根据每列中的值筛选表中的结果,该怎么办?
这可能吗?如果是这样的话,既然索引中的最大列数是16,那么您如何对其进行索引呢?任何给定条件组合的结果,我需要在10秒内。
谢谢你的洞察力。

qfe3c7zg

qfe3c7zg1#

请看我对以下问题的回答https://stackoverflow.com/a/45611294/2350861
正如您的问题评论中提到的,拥有一个包含这么多列的表不是一个好主意。处理属性过滤的这种必要性的最佳方法是使用一个具有多对一关系Map的单独的值表。然后可以按如下方式筛选所需的值:

SELECT * FROM table a where conditional = X 
AND a.PrimaryId IN 
(SELECT P_Id FROM values WHERE ValueType = "value1" AND ValueValue = "x" AND P_Id = a.PrimaryId)
AND a.PrimaryId IN 
(SELECT P_Id FROM values WHERE ValueType = "value2" AND ValueValue = "y" AND P_Id = a.PrimaryId)
.... ;

也可以改用内部联接

SELECT * from table a where conditional = X
INNER JOIN values b
INNER JOIN values c
WHERE a.P_Id = b.P_Id AND a.P_Id = c.P_Id ...
AND b.ValueType = "value1" AND b.ValueValue = "x"
AND c.ValueType = "value2" AND c.ValueValue = "y"
... ;

尽管这比一个有数百列的表要好,但随着“值”数量的增加,这仍然会变得相当难看。我会考虑使用外部自由文本/属性搜索引擎或索引器。

相关问题