我有一个与性能DB MySQL相关的问题。我有这样的查询里面有大数据:
SELECT
*
FROM
tableA a
INNER JOIN tableB b ON a.id = b.id AND a.code = b.code
INNER JOIN tableC c ON a.uniq = c.uniq
WHERE
a.date = '2020-01-01'
AND a.type = 'X'
AND b.merk = 'New';我的问题是,使用单一索引还是多列索引更好?
例:
tableA索引(Example1):
tableA索引(Example2):
还有什么更好的?Example1还是Example2?请解释一下。
注:也许tableA会在将来的另一个查询中得到瓦里安的位置。
谢谢
发布于 2018-08-20 12:48:05
引擎将只能使用每个表中的一个索引,因此其他索引在将来可能会帮助您处理其他查询,但它们在帮助您处理此特定查询方面的好处将受到限制。
考虑到我们对您的查询的了解以及对表和插入模式的了解有限,我建议如下。
Table A - (Date, Type)
Table B - (merk, ID, Code)
Table C - (Uniq)当然,如果您能够限制结果集列(去掉SELECT *),那么索引中的更多列可能会有好处。
上面的这些索引将允许引擎快速查找并快速到达它想要的行。
我确实有一个关于表B上的"merk“的问题。如果这是一种状态变化,那么我就不会对它进行索引,只在ID和Code上留下一个索引。如果字段的值经常发生变化,那么它通常是一个糟糕的索引候选对象,因为它会导致很大的分裂。
发布于 2018-08-20 12:14:23
最好的结果可以用下面的索引来估计:
Table A - (id, uniq, date, code, type)
Table B - (id, code, merk)
Table C - (uniq)https://dba.stackexchange.com/questions/215332
复制相似问题