繁体   English   中英

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

[英]MySQL - Query performance with many where conditions

假设有一个看起来像这样的表:

名称| 日期| value1 | value2 | value3 | ... | value100 varchar | 日期| 浮动| 浮动| 浮动| 浮动...

我可以使用它执行SELECT语句,并使用WHERE value1> n,或执行WHERE value1> n AND value2 = n。

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

这可能吗? 如果是这样,由于索引中的最大列数为16,您将如何对其进行索引? 在10秒内,我将需要WHERE条件的任何给定组合的结果。

感谢您的见解。

请参阅我对以下问题的回答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"
... ;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM