以下是我的表结构:这三张表我需要做三表联合查询。目前遇到的问题是: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语句应该怎样优化呢?
解决方案 »
- mysql有时间触发器吗?
- 在PHP中,mysql的模糊查询语句是怎么写的啊???有劳各位大虾咯
- 关于mysql 模糊配对的问题.....
- mysql的一个连接问题
- 50分请教一个MYSQL数据库更新的语句
- [mysql] insert语句中使用set是标准sql吗?
- 有关mysql的几个小问题?
- 40+相同格式表统一查询结果,求好方案
- 新手诚心请教,从php post过来的值写入数据库,如果值相同,能不能在表格中自动计数?
- where、order by、limit 1 混合使用查询很慢的情况
- 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