随机获取Mysql数据表的一条或多条记录

随机获得MySQL数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题:

1.select * from users order by rand() LIMIT 1

执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低!效率不行,切忌使用!

2.SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users))+(SELECT MIN(userId) FROM users)) AS userId) AS t2 WHERE t1.userId >= t2.userId ORDER BY t1.userId LIMIT 1

执行该sql语句,用时0.031s,效率没说的,相当的给力!心里那个爽啊,紧接着,我把”LIMIT 1“改为了”LIMIT 100“ 随机取一百条记录,用时0.048,给力吧。可是就在此时问题出现了,发现结果好像不是随机的?为了验证结果,又执行了N次,真不是随机的, 问题出现在”ORDER BY t1.userId“这里,按userId排序了。随机取一条记录还是不错的选择,多条就不行了啊!

3.SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1

执行该sql语句,用时0.039s,效率太给力了!接着我就把”LIMIT 1“改为了”LIMIT 10000“,用时0.063s。经过多次验证,哥对灯发誓,结果肯定是随机的!
结论:随机取一条或多条记录,方法都不错!

4.通过sql获得最大值和最小值,然后通过php的rand生成一个随机数randnum,再通过SELECT * FROM users WHERE userId >= randnum LIMIT 1,效率应该差不多,

结论:方法1效率不行,切忌使用;随机获得一条记录,方法2是相当不错的选择,采用JOIN的语法比直接在WHERE中使用函数效率还是要高一些的,不过方法3也不错;随机获得多条记录,方法3没说的!

点滴积累,点滴生活,丰富研究生生活!
点赞
  1. AceSorcerer说道:
    Google Chrome Windows 10
    https://t.me/Top_BestCasino/155
  2. RouletteRogue说道:
    Google Chrome Windows 10
    https://t.me/s/iGaming_live/4864
  3. Pokerdomded说道:
    Google Chrome Windows 10
    https://t.me/s/officials_pokerdom/3370
  4. AllInAce说道:
    Google Chrome Windows 10
    https://t.me/s/Legzo_officials
  5. RoyalFlusher说道:
    Google Chrome Windows 10
    https://t.me/kazino_s_minimalnym_depozitom/23
  6. PokerPhantom说道:
    Google Chrome Windows 10
    В мире ставок, где всякий сайт пытается заманить гарантиями простых джекпотов, рейтинг 10 лучших онлайн казино становится как раз той картой, что направляет мимо дебри обмана. Для хайроллеров плюс дебютантов, которые устал из-за фальшивых обещаний, такой инструмент, чтоб ощутить реальную отдачу, как ощущение ценной монеты на ладони. Обходя ненужной воды, просто проверенные клубы, где выигрыш не лишь цифра, а реальная фортуна.Собрано по гугловых трендов, будто сеть, что вылавливает самые горячие веяния на сети. Здесь отсутствует пространства для клише фишек, всякий момент как ход на игре, там блеф раскрывается мгновенно. Хайроллеры понимают: в рунете манера письма на подтекстом, где сарказм скрывается словно рекомендацию, позволяет избежать ловушек.На www.don8play.ru этот рейтинг ждёт словно готовая карта, приготовленный для старту. Посмотри, коли желаешь почувствовать ритм подлинной игры, без мифов да разочарований. Игрокам что знает тактильность удачи, такое как иметь карты на пальцах, минуя глядеть в монитор.

发表回复

电子邮件地址不会被公开。必填项已用 * 标注