一个mysql表有40W条数据。
表结构如下!
问题是:获取f3重复字段的前十条数据。
考虑性能!!!
你这个问题就有不合理的地方,f3重复字段可能有很多种 比如 f3字段有10条a重复 10w条b重复 那么你究竟要取出哪一个重复字段的前10条呢?如果是所有f3有重复字段的所有重复项的前10条,那么查出来就不只10条啊。
你可以参考一下这篇文章的相关介绍 http://www.cnblogs.com/lyroge/p/3837886.html
问题 可以理解成 每门课的前十名。求各位大佬指点。
select * from 表名 where 重复的字段 in (select 重复的字段 from 表名 group by 重复的字段 having count(1) > 1);
建立索引,走索引查询效率就不会那么差了
SELECT * FROM ( SELECT F3 FROM 表 GROUP BY F3 ORDER BY F3 LIMIT 10) T1 JOIN 表 T2 ON T1.F3 = T2.F3
先将前十条重复数据找出来,做关联将这些查询出来
楼上,我想要的是每一个f3重复字段,f4字段前十条数据。
SELECT
*
FROM
表 T1
WHERE
(
SELECT
count(1)
FROM
表 T2
WHERE
T2. F3 = T1. F3
AND T2. F4 >= T1. F4
) <= 10;
看看这个是不是你想要的吧!
select t1.f2 t1f2,t1.f3 t1f3,t1.f4 t1f4 from ti group by t1.f3 union all
select t2.f2 t2f2,t2.f3 t2f3,t2.f4 t2f4 from t2 group by t2.f4 limit 10
用存储过程把,一条sql很费时间和资源,我试过在1亿条记录的数据库中查询指定3000个name的各自最后十条记录,用功能近30分钟,然后用存储过程写,就0.75s