首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL INNODB优化及指标

问MySQL INNODB优化及指标
EN

Stack Overflow用户
提问于 2013-01-02 20:42:16
回答 2查看 80关注 0票数 0

我在设计MySQL数据库..。

  1. 我有许多使用UserID作为主键的表。所有这些表对于每个用户都将有一行,因此将以相同的速度增长。考虑到它们将通过主键(UserID)访问,我假设没有必要索引到这个键,因为每个键都是唯一的。
  2. 我还将有一些表,这些表的主键将是递增的,UserID将是第二列。对于这些表,第二列中将有多个UserID实例。(每个UserID都有许多朋友,每一个都列在不同的行中)。我预计这些表会增长很长,但是不太宽,因此在GB方面不太大。

问题:如果我在上面第2部分(用户in /第二列)中的表上添加了一个索引,如果我的查询使用的是UserID for Joins (所有连接都是UserID),这是否意味着joins将通过索引UserID访问较大的表(第2部分),因此访问这些较大的表的速度将与第1部分中的较小的表类似?

使用UserID作为唯一的主键(较短的表)或索引列(较大的表)的所有表都将是Joins的一部分--这是否是一个合理的设计,以确保如果表相当大,那么良好的响应时间--一直到1亿行?(不包括其他规定,如HW)。

有什么想法?thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-02 20:49:08

主键字段自动成为唯一索引的一部分,因此不需要在此基础上添加另一个索引。

将索引放在where、join和/或order by子句中使用的任何字段上是一个很好的经验规则。

就速度而言,没有人能确定添加(或删除)索引是否会改善性能.对于简单/小的DB,索引总是一个主要的加速。对于大型/复杂的模式,它们实际上会在某些场景中损害性能。您将不得不对您的系统进行基准测试以确保。但总的来说,指数=好。

票数 2
EN

Stack Overflow用户

发布于 2013-01-02 21:26:29

如果一列(或一组列)被定义为表的主键,则将有一个与其相关联的索引(它们)。参见MySQL对主键的引用。

如果您正在实现具有JOIN的查询,那么正如Marc B已经指出的,在您所加入的列上添加索引通常是一个很好的做法(在您的例子中是userId)。

如果我的查询使用的是UserID for Joins (所有连接都离开UserID),这是否意味着joins将通过索引UserID访问较大的表(上面的第2部分)

但是,正如您已经问过的,不确定MySQL是否会使用您创建的索引。根据查询的结构和结果集中可能的数据,MySQL查询优化器可能决定不使用您添加的索引。查找MySQL是否使用索引的方法是运行EXPLAIN查询。见其语法和如何使用它优化查询。您可以将查询优化器引导到使用某些索引,这可能会节省查询计划分析和查询执行性能方面的时间,但我建议您运行几个测试,以确保您所执行的索引确实更好。您还应该记住,随着表中数据的增长,查询的性能可能会降低,因此您应该定期检查查询的性能并安排索引。

如果查询中的第二个表总是在userId字段上查询,那么您最好利用MySQL 5.1提供的分区支持。在后台将主表中的切分记录划分为几个表,如果您遵循它的规则,那么它确实可以提高查询的性能。

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

https://stackoverflow.com/questions/14128845

复制
相关文章

相似问题

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