MYSQL 从百W级数据表中随机查询10条记录,主键ID是非连续的长整型的,请问有什么高效的查询SQL语句吗?

ID是这样的:3059205917277944494,非连续的,非自增的

首先程序产生一个随机数,然后大于这个值的取10条
SELECT * FROM  tablename WHERE id>xxx    LIMIT 10    

如果想分开的,那就多产生几个随机数x1 x2 x3 
SELECT * FROM  tablename WHERE id>x1    LIMIT 10 
SELECT * FROM  tablename WHERE id>x2    LIMIT 10    
SELECT * FROM  tablename WHERE id>x2    LIMIT 10    

然后得到的记录再选10条


如果有其他索引的话也可以随机一个大于或小于这个
select * from tablename where uid>x1 and id>xxx limit 10追问

首先感谢您的回答。
事先从程序中生成这种方式已经试过了,但是存在一个问题:如果ID分布不均匀的情况下,随机出来的ID可能会取不到足够的数据(这个随机数之前是通过最小值和最大值之间来随机的,但是这个数值的分布可能不均匀。比如id>xxx的数据可能取出来不足10条)
目前想要的是从MYSQL这里入手,是否能够在MYSQL主键中随机取出10条并且能够利用到索引。(order by rand()效率太低)

追答

还有就是取一个大的值求余吧
SELECT * FROM tablename WHERE id%100000=9999 limit 10

温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜