【发布时间】:2011-05-14 14:11:13
【问题描述】:
我目前正在处理一个大表(150k 行和计数),虽然它更小,但我尝试的查询要快得多,但随着它的增长,它非常慢,即使我限制 1,它也可以最多需要五分钟。我需要加快速度。
有两个表,一个用户表(大约 5000 条记录)和一个历史表(大约 150,000 条记录),其中有两列,一个日期和该日期的状态。
查询是一种选择,用于查找没有在给定日期有历史记录的用户。
我目前正在尝试做的事情如下:
select
u.user_id
from
users u
left join history h on u.id= h.user_id and date = '20101116'
where
date IS NULL;
它的工作原理是我在日期 20101116(YYYYMMDD 格式)加入,如果加入的表日期值为 null,我知道我在该给定日期没有历史记录。这可行,但速度非常慢,我想知道是否有更快/更聪明的方法。
我的桌子是这样的:
用户
+-----+------------------+ |编号 |电子邮件地址 | +-----+------------------+历史
+--------+------------+--------+----------+ |编号 |用户 ID |日期 |状态 | +--------+------------+--------+----------+我只有两个表的 ID 列都有索引。
【问题讨论】:
-
您是否在 user_id 上创建了索引?
-
你的表有没有包含id和日期的索引?
-
你想通过
where date IS NULL实现什么?因为我看到它的方式......你可能只得到那些没有日期的记录......在第一个表中 -
@ Misnomer 'Where date is null' 表示我只返回无法加入历史项目的记录。
-
@Robin-Timothy Card- 我推荐阅读 SQL odetocode.com/Articles/237.aspx 中的索引。