首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最佳性能索引- MySQL

问最佳性能索引- MySQL
EN

Database Administration用户
提问于 2018-08-20 01:47:29
回答 2查看 258关注 0票数 0

我有一个与性能DB MySQL相关的问题。我有这样的查询里面有大数据:

代码语言:javascript
复制
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):

  • idx1 (merk,代码,日期,类型)
  • idx2 (日期)
  • idx3 (merk)
  • idx4 (代码)
  • idx5 (类型)

tableA索引(Example2):

  • idx1 (merk,代码,日期,类型)
  • idx2 (merk,代码)
  • idx3 (日期、类型)

还有什么更好的?Example1还是Example2?请解释一下。

注:也许tableA会在将来的另一个查询中得到瓦里安的位置。

谢谢

EN

回答 2

Database Administration用户

发布于 2018-08-20 12:48:05

引擎将只能使用每个表中的一个索引,因此其他索引在将来可能会帮助您处理其他查询,但它们在帮助您处理此特定查询方面的好处将受到限制。

考虑到我们对您的查询的了解以及对表和插入模式的了解有限,我建议如下。

代码语言:javascript
复制
Table A - (Date, Type)
Table B - (merk, ID, Code)
Table C - (Uniq)

当然,如果您能够限制结果集列(去掉SELECT *),那么索引中的更多列可能会有好处。

上面的这些索引将允许引擎快速查找并快速到达它想要的行。

我确实有一个关于表B上的"merk“的问题。如果这是一种状态变化,那么我就不会对它进行索引,只在ID和Code上留下一个索引。如果字段的值经常发生变化,那么它通常是一个糟糕的索引候选对象,因为它会导致很大的分裂。

票数 0
EN

Database Administration用户

发布于 2018-08-20 12:14:23

最好的结果可以用下面的索引来估计:

代码语言:javascript
复制
Table A - (id, uniq, date, code, type)
Table B - (id, code, merk)
Table C - (uniq)
票数 -1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/215332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档