标签:query-performance mysql mysql-5-5 query
我有这个简单的查询:
SELECT
friend_id
FROM
default_friend
WHERE
user_id = 1
结果如下:
+-----------+
| friend_id |
+-----------+
| 2250 |
| 4901 |
| 7187 |
| 9337 |
| 9843 |
+-----------+
现在我的查询太复杂了:
SELECT
friend_id, user_id, approved
FROM
default_friend
WHERE
user_id = 1
AND (friend_id IN (SELECT
friend_id
FROM
default_friend
WHERE
user_id = 1))
AND approved = 0
我的问题是:SELECT进入第二个查询会返回与第一个查询返回的数据相同的数据吗?含义friend_id = 2250,4901,7187,9337,9843或者我需要运行第一个并以编程方式拆分结果并构建第二个结果?另外我想知道哪种方式更合适!
解决方法:
不,您不必运行第一个查询,获取结果,动态构建第二个查询然后运行它.
而且您也不需要这个复杂的第二个查询.简单的就足够了:
SELECT
friend_id, user_id, approved
FROM
default_friend
WHERE
user_id = 1
AND
approved = 0 ;
并且您不需要在SELECT列表中真正需要user_id和approved.它们将在所有行中分别为1和0,不是吗?
所以,问题是.为什么不保留原始的第一个查询,只添加附加条件(approved = 0)?:
SELECT
friend_id
FROM
default_friend
WHERE
user_id = 1
AND
approved = 0 ;
标签:query-performance,mysql,mysql-5-5,query 来源: https://codeday.me/bug/20190806/1594197.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。