0

我有一个包含两个表的大型数据库:stat 和 total。

关系示例如下:

统计:

|   ID   |  total event |
+--------+--------------+
|   7    |  2           |
|   8    |  1           |

全部的:

|ID | Event        |
+---+--------------+
| 7 | "hello"      |
| 7 | "everybody"  |
| 8 | "hi"         |

这是一个非常简化的版本;还要考虑 STAT 表可能有 500K 记录,对于每个 STAT 我可以有大约 200 TOTAL 行。

目前,如果我在表 TOTAL 中运行一个简单的SELECT查询,系统会非常慢。

任何人都可以为创建 TOTAL 表提供一些建议吗?是否可以对 MySQL 说该id列已经排序,因此没有理由扫描所有行直到最后,例如,id=7

4

3 回答 3

2
  1. 添加INDEX(ID)到您的表(两者),如果你还没有。

  2. SELECT COUNT(*) FROM TOTAL WHERE ID=7-> 如果IDindexed,这会很快。

于 2012-06-25T15:16:34.170 回答
0

您可以添加索引,此外还可以对表进行分区。

于 2012-06-25T15:16:19.260 回答
0

根据@ypercube 的评论,表未以排序状​​态存储,因此无法将其“告诉”数据库。但是,您可以在表上添加索引以使它们更快地搜索。

要检查的一件重要事情 - 看起来像是TOTAL.ID作为外键 - 如果是这样,表TOTAL应该有一个名为ID. 将该名称的现有列重命名为STAT_ID,因此很明显它是什么外键。然后在 上添加索引STAT_ID

最后,作为一种风格,我建议您使表名和列名不区分大小写,并将它们写成小写。当关键字为大写而数据库对象为小写时,它更易于阅读 SQL。

于 2012-06-25T15:23:06.730 回答