首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能在MySQL中安全地索引表的所有列吗?

我能在MySQL中安全地索引表的所有列吗?
EN

Database Administration用户
提问于 2012-01-20 12:29:51
回答 2查看 5.6K关注 0票数 5

我有一张四列的桌子。一个是主键,另三个列是对其他表的列的引用。我在这四个表上使用join作为搜索筛选器。这些加入需要时间。

所以我想在列上有索引,因为我读到应该在联接条件的列上创建索引。我的问题是,如果表中的所有列都被索引,会不会出现问题?有没有其他方法可以降低这些搜索过滤器的时间复杂度。

更多提示:

  • Table1(主搜索)-一亿个条目primary_key fk1 fk2 fk3
  • 表2-8亿条目pk1 .(8-9列)
  • 表3-7亿条目pk2 .(10-12列)
  • 表2-8.5亿条目pk3 .(7-8列)

我使用的是MyISAM引擎。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2012-01-20 17:39:00

当涉及到查询时,表的索引永远不应该是您的首要考虑。

您计划使用的查询应该指定所需的索引。

根据这些查询,可以单独对某些列进行索引。其他查询需要复合索引。ORDER BYGROUP BY子句应该为要创建的索引提供即时提示。不使用此类提示可能会导致临时表排序,而不是按照所需的顺序对数据使用索引。

列值基数低应消除索引的需要。

即使考虑到这些因素,您也会发现该查询可能需要进行一些调整(即。(重构)以提高性能。

当您达到拥有正确索引的地步时,不必担心这些索引的大小。对于MyISAM表,这意味着.MYI文件可能会显著增长。

索引文件的大小以及索引的数量现在应该与查询的性能进行权衡,特别是如果索引提供了正确的数据排序和最快的检索。

根据行数、列的基数、删除和更新的数量,查询的解释计划可能会随着时间的推移而改变。一旦查询的解释计划改变了几个月前的样子,您就应该探索添加或删除索引的必要性。

票数 3
EN

Database Administration用户

发布于 2012-01-20 17:30:41

索引所有列(在每一列上索引)可能会或不会提高整体性能。这取决于指数的选择性。考虑为典型查询创建覆盖索引。例如,如果您通常连接所有3个表,则查询将主要受益于复合索引(f1,f2,f3)。此外,如果这三个字段的组合是唯一的,则可以在f1,f2,f3上定义主键,因此不需要代理PK (假设此表中没有其他字段)

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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