我有一个包含两个表的大型数据库: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
?
答案 0 :(得分:2)
将INDEX(ID)
添加到您的表格(两者),如果您还没有。
SELECT COUNT(*) FROM TOTAL WHERE ID=7
- >如果ID
已编入索引,则会很快。
答案 1 :(得分:0)
您可以添加索引,还可以对表进行分区。
答案 2 :(得分:0)
根据@ ypercube的评论,表格不会以排序状态存储,因此无法将此“告诉”到数据库。但是,您可以在表上添加索引以使其更快地进行搜索。
要检查的一件重要事情 - 看起来TOTAL.ID
用作外键 - 如果是这样,表TOTAL
应该有一个名为ID
的主键。将该名称的现有列重命名为STAT_ID
,因此很明显它是什么外键。然后在STAT_ID
上添加索引。
最后,作为一种风格,我建议您使表和列名称不区分大小写,并以小写形式编写。当关键字大写,数据库对象较低时,它可以更容易地读取SQL。