MySql选择内部选择非常慢

MySql选择内部选择非常慢,mysql,join,Mysql,Join,我在使用另一个mysql select时遇到问题 此查询耗时00007秒: SELECT node.title AS node_title FROM node node WHERE (( (node.status = '1') AND (node.type IN ('event')) AND (node.uid= 1) )) 但这需要9秒: SELECT node.title AS node_title FROM node node WHERE (( (node.status = '1')

我在使用另一个mysql select时遇到问题

此查询耗时00007秒:

SELECT node.title AS node_title
FROM node node
WHERE (( (node.status = '1') AND (node.type IN  ('event')) AND (node.uid= 1) ))
但这需要9秒:

SELECT node.title AS node_title
FROM node node
WHERE (( (node.status = '1') AND (node.type IN  ('event')) AND (node.uid= 1)  OR node.nid IN (SELECT n.nid FROM tag n WHERE n.uid='1') ))
有人知道为什么吗?两者都很快分开

我要做的是用witch获取一些数据,我可以用join获取一些数据。 我也尝试过这种方法,但在性能方面也有同样的问题:

SELECT node.title AS node_title
FROM
node node
LEFT JOIN tag tag ON tag.uid = 4
WHERE (( (node.status = '1') AND (node.type IN  ('event')) AND (node.uid  = '4') OR (tag.nid = node.nid) ))

有什么想法吗?谢谢

有时
会以不好的方式影响查询计划。你可以试试这个:

SELECT n.title AS node_title
FROM node n
WHERE n.status = '1' AND n.type IN  ('event') AND n.uid = 1
union 
SELECT n.title
FROM node n
WHERE exists (SELECT t.nid FROM tag t WHERE t.uid = '1' and t.nid = n.nid);
要使其发挥最佳效果,请使用以下两个索引:

node(status, type, uid)
tag(uid, nid)

显示您的表结构并指示此结构:节点(状态、类型、uid、nid、标题)标记(uid、nid),索引仅在节点nid上。两个表都是2条记录很幸运,它需要相同的时间我怀疑
tag
是一个非常大的表,需要时间来查询。你有我提到的两个索引吗?Nope标签是一个非常小的标签,有两条记录,事实上正如我写的,select也需要0.0007