
[英]Improving performance of mysql query with multiple where conditions on large tables
[英]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.