简单生活 发表于 2015-1-16 20:14:36

绝无经由的MySQL完成表中掏出随机数据

通过支付一定费用,客户可以得到优先的24/7支持,访问内容丰富的在线知识库和联系一个专门的技术负责经理。  之前在群里会商过这个成绩,对照的成心思.MySQL的语法真好玩.他们本来都想用php的完成随机,但掏出多条仿佛要举行两次以上查询.翻了手册,找到了上面这个语句,能够完成义务了。
SELECT*FROMtable_nameORDERBYrand()LIMIT5;
  rand在手册里是这么说的:
  RAND()
  RAND(N)
  前往在局限0到1.0内的随机浮点值。假如一个整数参数N被指定,它被用作种子值。
mysql>selectRAND();
->0.5925
mysql>selectRAND(20);
->0.1811
mysql>selectRAND(20);
->0.1811
mysql>selectRAND();
->0.2079
mysql>selectRAND();
->0.7888
  你不克不及在一个ORDERBY子句用RAND()值利用列,由于ORDERBY将反复盘算列屡次。但是在MySQL3.23中,你能够做:SELECT*FROMtable_nameORDERBYRAND(),这是有益于失掉一个来自SELECT*FROMtable1,table2WHEREa=bANDc<dORDERBYRAND()LIMIT1000的汇合的随机样本。注重在一个WHERE子句里的一个RAND()将在每次WHERE被实行时从头评价。
  但我试了一下,8千笔记录的表,实行一次必要0.08sec,.慢了些
  厥后就教了google,失掉以下代码
SELECT*
FROMtable_nameASr1JOIN
(SELECTROUND(RAND()*
(SELECTMAX(id)
FROMtable_name))ASid)
ASr2
WHEREr1.id>=r2.id
ORDERBYr1.idASC
LIMIT5;
  实行效力必要0.02sec.惋惜的是,只要mysql4.1.*以上才撑持如许的子查询.
即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。

深爱那片海 发表于 2015-1-18 19:10:23

对于微软系列的东西除了一遍遍尝试还真没有太好的办法

蒙在股里 发表于 2015-1-25 08:39:42

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

精灵巫婆 发表于 2015-2-2 19:05:04

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

admin 发表于 2015-2-8 04:42:25

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

飘灵儿 发表于 2015-2-24 16:45:45

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

透明 发表于 2015-3-7 12:55:08

对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。

仓酷云 发表于 2015-3-15 06:58:45

所以你总能得到相应的升级版本,来满足你的需求。
页: [1]
查看完整版本: 绝无经由的MySQL完成表中掏出随机数据