假设您有一个包含大约100万行的id,a,b,c,d,e,f,g
的表格。然后可以用多种组合的方式进行多个WHERE ...AND...AND...etc
条件的查询。 这就是例如a AND b AND e
或a AND f AND g
或e AND f AND g
。多个或单个复合索引
因此为了解释所有组合,您将不得不创建多个复合索引,但如果a,b,c,d,e,f,g
的范围是[1,10],那么不会有零。
难道一个只是让每个起始变单一的化合物,从而a,b,c,d,e,f,g
和b,a,c,d,e,f,g
等。而在查询时间做这样的事情
#b and e have not been chosen
SELECT * FROM WHERE a=3 AND b!=0 AND c=4 AND d=5 AND e!=0 AND f=1 AND g=9
#I think you get the logic
难道这样的程序让MySQL的仍然使用复合索引还是我真的需要创建复合索引的所有可能的组合。
最终结果是索引的数目减少到7,而不是左组合候选条件的数目是方式高于7
这种问题有时是缺乏规范化的症状 – Strawberry
这是模拟mysql中的物化视图,因此列数很大。 – delmalki
草莓确实有一个标准化点,只要你的a-g列都是相同的上下文。但是,如果你的数据是每个a-g列都有它自己的标准化值 - 比如我在一个政府合同表中工作。根表有超过20个单独的查找参考表的链接,每个参考表都标准化为ID。如果您可以扩展更多的通用a-g上下文,我们可以为您的情况提供更好的说明和输入。 – DRapp