易截截图软件、单文件、免安装、纯绿色、仅160KB

mysql 随机获取记录 order by rand 优化

如果要随机获取记录数,在mysql里最简单的方法肯定是order
by
rand
()了,但是这种方法只能在表记录极少的情况下才能使用。主要是因为order
by
rand
()导致了using filesort.这个时候查询类型会变成all,索引会失效。只需简单的变通下,完成可以做到同样的效果。
根据记录的类型,分类连续和非连续两种。
连续指记录是连续存放的,并且有字段可以证明记录是连续的,例如自增id。
非连续是指记录是随机存放的,例如有条件的查询,结果肯定不是连续的。
一、连续记录优化
先得到表的最大id和最小id。select max(id),min(id) from table
1.在程序里随机一个在最大id和最小id的中间数,查询的时候大于这个随机数的就是随机记录了。
Sql代码
select
 * 
from
 
table
 
where
 id > 中间数 limit length;  
select * from table where id > 中间数 limit length;
缺点:如果中间数很大的话,获取不了需要的记录数,随机性不强
2.在程序里随机n个最大id和最小id的中间数,查询的时候用in获得这几个中间数的记录
Sql代码
select
 * 
from
 
table
 
where
 id 
in
 (中间数1, 中间数2,中间数3)  
select * from table where id in (中间数1, 中间数2,中间数3)
需要注意的是,如果你要获取5条记录,那建议随机10个数。
缺点:性能不如第1种方法,但是随机性更强
二、非连续记录优化
其实非连续记录的方法一样可以应用在连续记录中。
首先获得记录的总数,例如:select count(*) from table where groupid = 1;
然后在程序里随机n个小于记录总数的中间数,之后通过循环
Sql代码
select
 * 
from
 
table
 
where
 groupid = 1 limit 中间数,1  
select * from table where groupid = 1 limit 中间数,1
来获得记录。
关于优化循环sql可以采用prepare或者union all来优化循环执行
关于第三种方法利用limit达到随机的效果,我拿了点数据测试。
总记录:175,410   条件记录:20,946
order
by
rand
Sql代码
SELECT
 * 
from
 Member 
WHERE
 Country = 
"HK"
 
ORDER
 
BY
 RAND
() limit 30  
SELECT


相关文档:

使用Jena将本体存入MySQL——文档和例子


 iMarine http://iMarine.blog.163.com
注明:本文档参考Jena 2.5文档,使用Jena 2.5 API和MySQL 5.0.4-beta-nt数据库。MySQL驱动包使用的是mysql-connector-java-3.1.10-bin.jar。
1 Jena的数据库接口
Jena提供了将RDF数据存入关系数据库的接口,Model、Resource、Query等接口可以用于访问和维护数据库里的RDF数 ......

Mysql Explain 详解[强烈推荐]

Mysql Explain 详解
一.语法
explain < table_name >
例如: explain select * from t3 where id=3952602;
二.explain输出解释
+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
| id | select_type | table | type  | possible_keys  &nb ......

MySQL 5.5 版本发布

近日,MySQL 5.5 第一个版本发布了,基于MySQl 5.4,但是在性能上相对于当前的5.0/5.1有了很大的提升。
 新特性:
支持semisynchronous (半同步)复制接口,可搭建出一个相对完美的MySQL高可用性方案
集成Innodb plugin 1.0.6
支持 SQL 标准 SIGNAL 和 RESIGNAL 语句
增强XML功能,支持 LOAD XML 语句
可通过 A ......

jsp连接MySQL数据库 2

●jsp连接MySQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<html>
<body>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?
user=soft&pas ......

Jsp 连接 mySQL、Oracle 数据库备忘

Jsp 连接 mySQL、Oracle 数据库备忘
2009-12-15 16:47
Jsp 环境目前最流行的是 Tomcat5.0。Tomcat5.0 自己包含一个 Web 服务器,如果是测试,就没必要把 Tomcat 与 IIS 或 Apache 集成起来。在 Tomcat 自带的 Web 服务器下可以进行 Jsp 测试。
    安装 Tomcat5.0 前需要安装 JDK(如果是 Windows server ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号