MySQL - 在许多条件下查询性能

问题描述 投票:0回答:1

假设有一个表格如下:

名字|日期| value1 | value2 | value3 | ...... | value100 varchar |日期|漂浮|漂浮|漂浮|浮......

我可以用这个做SELECT语句,并使用WHERE值1> n,或者做WHERE value1> n AND value2 = n。

但是,如果我想包含多达100个条件的查询,以根据每列中的值过滤表中的结果,该怎么办?

这可能吗?如果是,你怎么能去索引这个,因为索引中的最大列数是16? WHERE条件的任何给定组合的结果我将在10秒内需要。

感谢您的见解。

mysql performance select indexing where
1个回答
0
投票

请参阅我对以下问题https://stackoverflow.com/a/45611294/2350861的回答

正如你的问题的评论中所提到的,拥有一个包含如此多列的表并不是一个好主意。处理属性过滤的这种必要性的最佳方法是使用具有多对一关系映射的单独值表。然后你可以过滤所需的值,如下所示:

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)
.... ;

您也可以使用INNER JOINS

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"
... ;

虽然比具有数百列的表更好,但随着“值”数量的增加,这仍然会变得非常难看。我会考虑使用外部自由文本/属性搜索引擎或索引器。

© www.soinside.com 2019 - 2024. All rights reserved.