如图,person为用户表,person_question为回答问题表,一个用户可多次回答问题。
查询结果:查询全部用户,排序,questionflag不为空,表示该用户回答过问题。
查询近4000条数据却需要6秒多,经反复验证,将left join换其他查询方式会快很多,但是与所需结果背离。
使用数据库为mysql,求大神指点
解决方案 »
- 请SQL语句高手指教!
- tomcat链接mysql出错
- 请问access如何导出表结构,并导入到mysql中?
- 急等!空间后台有google的AdSense广告时,mysql数据备份还原(恢复)软件功能失效
- update 语法问题
- mssql能实现的语句,如何能在mysql实现?急
- 关于MySql安全性的讨论
- 关于三级封锁协议的一点小疑问
- 我想用JDBC连接MYSQL,请问那里有MYSQL的JDBC驱动下载??
- 求助:ERROR 1062 (23000):Duplicate Entry
- 求助一个sql语句的问题
- 大师,请教下mysql cluster问题--我没配置REPLICATION,为什么操作都可以同步?
explain select ...
show index from ..
以供分析。
你说的没懂,能不能详细说一下。
代码如下:
SELECT DISTINCT b.open_id AS questionflag,p.id, p.phone, p.risk_level, p.nickname, p.open_id,
p.headimgurl, p.sex, p.city, p.province, p.country,p.use_status, p.create_date, p.source, p.unique_code
FROM person p LEFT JOIN person_question b ON p.open_id=b.open_id ORDER BY p.create_date desc,p.id
我想要的结果是查询该用户是否回答过问题,而不是把每次回答的记录查询出来
用户共计4000名
我想要的结果是查询该用户是否回答过问题,而不是把每次回答的记录查询出来
用户共计4000名主要是评估十效率,如果 DISTINCT 去掉后效率好,说明问题在 DISTINCT 上,想办法调整 DISTINCT 操作
谢回,比原来快了近2秒,需要4.822秒,是否有更好的解决方案先不要加排序:
表 person多大,单独运行 select * from p, 看看多少时间 ,这个是基础时间,减不了的
表person_question多大,单独运行 select open_id from person_question group by open_id,需要多少时间。
谢回,比原来快了近2秒,需要4.822秒,是否有更好的解决方案先不要加排序:
表 person多大,单独运行 select * from p, 看看多少时间 ,这个是基础时间,减不了的
表person_question多大,单独运行 select open_id from person_question group by open_id,需要多少时间。 select * from person需要1.2秒
select open_id from person_question group by open_id需要0.2秒
select ... from person p left join (select open_id from person_question group by open_id) a on p.open_id= a.open_id 5.05秒
带排序ORDER BY p.create_date desc,p.id需要6.46秒