mysql快速选择查询而不读取所有数据库

时间:2012-06-25 15:13:32

标签: mysql database select

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

关系的例子如下:

STAT:

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

TOTAL:

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

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

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

有人可以帮我提一下TOTAL表的创建建议吗?是否可以对MySQL说id列已经排序,以便没有理由扫描所有行直到结束,例如id=7

3 个答案:

答案 0 :(得分:2)

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

  2. SELECT COUNT(*) FROM TOTAL WHERE ID=7 - >如果ID 已编入索引,则会很快。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

最后,作为一种风格,我建议您使表和列名称不区分大小写,并以小写形式编写。当关键字大写,数据库对象较低时,它可以更容易地读取SQL。