mysql优化之数据库随机取一条数据
来源:互联网 发布:平整度记录表数据 编辑:程序博客网 时间:2024/06/01 23:46
大家都知道mysql 查询数据库随机取一条数据当然用rand()方法
其实这个方法是超级鸡肋的,当然你爱好也无所谓,首先列举两个表
a表 id(主键 int),cardnumber(身份证号码 char(18)),name(用户名 varchar(40))
b表 id(a表对应id int), tags(标签 varchar(11)),tagsnumber(标签编码,varchar(24))
现在打比方这a表有一万表数据 ,对应的b表有1万+数据
不要在乎表这里只是举例
现在查询a表随机一个用户
1:select * from a order by rand() limit 1(肯定初步大家刚出来的都会想到这个方法)
可是这样靠谱吗,反正我觉得不靠谱 上面说了一万条数据怎么也得接近20秒吧返回一条数据
首先说说rand()他是把表数据首先整个取出来,排序,就算你limit有用吗
2:select * from a limit 5
在代码随机取出一条
这种也不是怎么好,
3:我看别人说max和min结合用,反正我觉得不靠谱,反正我尝试了一下基本也差不多要5秒左右,查询复杂一点,对于那种一条sql几乎有20几行的那真是要你疯癫起来
4:结合程序+order by
首先数字字段+索引来实现
$orderby=array('order by id asc','order by id desc','order by cardnumber asc','order by cardnumber desc');
$sql="select * from a ".$orderby[array_rand($orderby,1)]. " limit 1 ";
虽然不能完全随机,但是还是满足日常需求
说道这个其实也可以讨论一下order by性能丢失,有时候你会发现没用order by和用了order by居然性能丢失,当然我说的是没有索引字段的情况下
例如假设上面表是一对一的关系 获取用户下面一个标签
select b.*,a.* from b inner join b on a.id=b.id order by a.uid asc limit 1
你会发现如果是b.uid会快一点,所以当你order by哪一个的时候建议返回字段的时候放在前面
- mysql优化之数据库随机取一条数据
- sql 随机取一条数据
- MySql从表结果集中随机取一条数据
- MySql从表结果集中随机取一条数据
- mysql 随机取一条或多条数据 高效率
- MySql从表结果集中随机取一条数据
- mysql高效率随机取一条或多条数据
- MySql 100万级别数据中随机获取一条或多条记录之RAND()优化
- [Mysql数据库] MySql 获取数据表中随机一条数据
- MySQL随机取一条数据 取指定条数的数据
- mysql随机取表中一条数据
- MySQL随机抽取一条数据
- MySQL随机获取一条数据
- mysql随机取数据
- mysql随机取数据
- mysql随机取数据
- 随机从数据库取一条记录
- mysql 取范围内随机一条记录
- NIO基础(3)-非阻塞式网络通信
- 为什么研究彩票是一种“侮辱智商”的行为?
- 关于各种无法解析的外部符号问题的相应解决方案
- 微信小程序 首行缩进、 去掉/取消首行缩进
- Python典型问题
- mysql优化之数据库随机取一条数据
- Apache WEB服务器详解
- oracle的权限,角色和用户的管理
- bootstrap table对每列数据进行统计汇总
- 异常测试的测试点
- java枚举定义
- leetcode链表习题总结
- 路灯
- FPGA前世今生(四)