我正在尝试从一系列MySQL表中选择重复的行。以下查询...
SELECT *
FROM table_name
WHERE column_name
IN (SELECT *
FROM (SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1
) AS subquery)
);
...在具有相同架构和相似行数的不同表中运行时,会产生截然不同的性能。在一个表中,它在几秒钟内执行,在另一个表中具有相同的数据类型和相似的行数,它在很长一段时间内挂起(目前在30分钟并且正在计数)。对于这种差异有什么可能的解释?
编辑 - 使用EXPLAIN显示所有查询都返回"不可能在阅读const表后注意到#34;对于从属子查询。这可能是提及任何表上没有索引的好时机(我继承了......)。在应该是uniqid
列的内容中查找重复值,以便我可以将其转换为正确的主键,这是整个snape搜索的重点。
答案 0 :(得分:0)
我建议将子查询拆分成临时表。
library(ggplot2)
library(directlabels)
data <- data.frame(X= c("A","B","C","D","X","Y","S","P","L","W"), Y=rnorm(10), Z=rnorm(10))
data$X <- as.character(data$X)
graph <- ggplot(data, aes(data$Y,data$Z))
t2<-theme(
axis.title.x = element_text(face="bold", color="black", size=15),
axis.title.y = element_text(face="bold", color="black", size=15),
plot.title = element_text(face="bold", color = "black", size=12),
axis.text.x = element_text(size=15),
axis.text.y = element_text(size=15)
)
graph <- graph + geom_point(aes(colour=data$X), size=3) + geom_smooth(method="lm", se=F, size=0.5) +
xlab("Y") + ylab("Z") +
geom_vline(xintercept=mean(data$Y), color="red", size=1, linetype=2) + theme_bw() + t2 +
geom_text(x=740,y=105, label="Avg", size=4.5); graph
direct.label.ggplot(graph)
答案 1 :(得分:0)
根据我的经验,MySQL在优化方面很差
SELECT *
FROM table1
WHERE col1 in (SELECT col2 FROM table2 WHERE ...)
而不是执行子查询,然后在col2
中查找所有table1
值,它会执行table1
的完整扫描,然后在col1
中搜索table2.col2
{1}}。
当你写JOIN
时,它会更好:
SELECT table1.*
FROM table1
JOIN table2 ON table1.col1 = table2.col2
在您的情况下,这将使用table2
的子查询来完成:
SELECT t1.*
FROM table_name AS t1
JOIN (SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(*) > 1) AS t2
ON t1.column_name = t2.column_name