关于多表关联查询优化的问题
比如有两个表,
一个是操作记录表
一个是用户表。
操作记录表中,记录用户的操作,【其中用一个字段UserID来保存操作者(即用户)的ID】
我的查询语句是这样的:
select top 20 a.*, u.Name from 操作表 a JOIN 用户表 u on a.UserID=u.ID order by a.ID desc
(则读取最新的20条操作记录,连同操作者的姓名同是给读出来)
这样是没有问题的。
但是,当操作表数据行多到百万级时,问题来了。
【操作表已对需要查询的列创建了索引】
【用户表由于只有几十人,没有建索引】
执行上面那条语句就变得很慢!(10多20秒!)
如果我只读取操作表:
select top 20 a.* from 操作表 a order by a.ID desc
那很快,毫秒级
那么,一定要把用户姓名读出来啊,我换了另外两种写法,一定很快,毫秒级:
select top 20 a.*, u.Name from 操作表 a LEFT JOIN 用户表 u on a.UserID=u.ID order by a.ID desc
【就是把很慢的JOIN改为LEFT JOIN,就变得很快了】
如果下面这样写,也是快得不要不要的
select top 20 a.*, u.Name from 操作表 a, 用户表 u where a.UserID=u.ID order by a.ID desc
为什么只用JOIN的写法会很慢啊?
只想知道原因。