1.exists和in的效率 引用:https://www.cnblogs.com/meibao/p/4973043.html
in的表為小表,exists為大表
-- 这条语句适用于a表比b表大的情况
select * from ecs_goods a where cat_id in(select cat_id from ecs_category);
-- 这条语句适用于b表比a表大的情况
select * from ecs_goods a where EXISTS(select cat_id from ecs_category b where a.cat_id = b.cat_id);
2.GROUP_CONCAT 和limit混合使用
GROUP_CONCAT 默認1024長度,多餘的將會被截取,limit不起作用
-- 查出來的長度1024碼
SELECT GROUP_CONCAT(a.msg_no)FROM
(
SELECT msg_no
FROM lrtdmsg
WHERE (msg_to = 'D044211' AND msg_from = 'LxAssistant') AND td_no = ''
UNION
SELECT msg_no
FROM lrtdmsg
WHERE (msg_to = 'D044211' AND msg_from = 'LxAssistant') AND td_no = ''
) a
ORDER BY a.msg_no DESC LIMIT 15
-- 應改為
SELECT GROUP_CONCAT(a.msg_no)FROM
(
SELECT msg_no FROM
(
SELECT msg_no
FROM lrtdmsg
WHERE (msg_to = 'D044211' AND msg_from = 'LxAssistant') AND td_no = ''
UNION
SELECT msg_no
FROM lrtdmsg
WHERE (msg_to = 'D044211' AND msg_from = 'LxAssistant') AND td_no = ''
) a
ORDER BY a.msg_no DESC LIMIT 15
)a
3.exists和limit搭配使用,limit無效 exists有優先權
-- 查出來不是一筆而是很多筆 (msg_no唯一)
SELECT a.*
FROM lrtdmsg a
WHERE a.td_no = '6172'
AND EXISTS(
SELECT 1 FROM lrtdmsg X WHERE (x.msg_from = 'LxAssistant' OR x.msg_to = 'D044211') AND x.td_no = '6172'
AND x.msg_no = a.msg_no
ORDER BY x.msg_no DESC LIMIT 1);