以下是我的表结构:这三张表我需要做三表联合查询。目前遇到的问题是:user表和role_user表的数据分别是10万左右,而取出10条数据却需要3秒多。SQL语句如下:
SELECT user.id,user.regdate,role.name FROM `user` LEFT JOIN `role_user` ON user.id = role_user.uid LEFT JOIN `role` ON role_user.rid=role.id WHERE user.pid=1 AND role.type=1 GROUP BY user.id ORDER BY user.id desc LIMIT 10上面的SQL语句如果不加where条件中的role.type=1,耗时是0.0008秒。一旦加上,就需要3秒多。我使用explain看了下,如下所示:请教各位大侠,该条SQL语句应该怎样优化呢?
SELECT user.id,user.regdate,role.name FROM `user` LEFT JOIN `role_user` ON user.id = role_user.uid LEFT JOIN `role` ON role_user.rid=role.id WHERE user.pid=1 AND role.type=1 GROUP BY user.id ORDER BY user.id desc LIMIT 10上面的SQL语句如果不加where条件中的role.type=1,耗时是0.0008秒。一旦加上,就需要3秒多。我使用explain看了下,如下所示:请教各位大侠,该条SQL语句应该怎样优化呢?
解决方案 »
- 求一SQL语句
- mysql5.1用不上联合索引,A能用B不能用
- 急啊,求救:数据库不能打开了
- 怎么将mysql的某个表中的部分数据导出到excel
- 请教一个问题:root的权限丢失了,怎么恢复,我的是WINDOWS 2000环境?看了一些文章没有明白。
- 伙计做的动网论坛邮件地址收集工具,大家看有什么好的建议?
- 关于SQL语句的写法
- 分页查询并过滤部分字段重复数据的问题
- 一个外键对应多个不同的表的提问。
- 减量数据
- mysql Access denied for user 'root'@'localhost' (using password: YES)
- MySQL5.5 数据库出现1067错误 ,棘手问题,帮帮忙呀,我没见过这种问题。。。要晕了
id :1
select_type: SIMPLE
table: user
type: index
possible_keys: pid
key: PRIMARY
key_len:4
ref: NULL
rows: 10
Extra:Using where
--------------------------------------------------------------------------------
id :1
select_type: SIMPLE
table: role_user
type: ref
possible_keys: uid
key: uid
key_len:4
ref: dchope_db.user.id
rows: 1
Extra:
--------------------------------------------------------------------------------
id :1
select_type: SIMPLE
table: role
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len:2
ref: dchope_db.role_user.rid
rows: 1
Extra:
已建立ID,TYPE的复合索引,同时也强制使用了,但还是不起作用。
已建立ID,TYPE的复合索引,同时也强制使用了,但还是不起作用。
贴你的SQL语句、SHOW INDEX