相关疑难解决方法(0)

如何在SQL中请求随机行?

如何在纯SQL中请求随机行(或尽可能接近真正随机)?

sql random

496
推荐指数
6
解决办法
42万
查看次数

如何优化MySQL的ORDER BY RAND()函数?

我想优化我的查询,所以我调查一下mysql-slow.log.

我的大多数慢查询包含ORDER BY RAND().我无法找到解决此问题的真正解决方案.Theres是MySQLPerformanceBlog的可能解决方案,但我认为这还不够.在未经优化(或经常更新,用户管理)的表上,它不起作用,或者我需要运行两个或更多查询才能选择我PHP生成的随机行.

这个问题有什么解决方案吗?

一个虚拟的例子:

SELECT  accomodation.ac_id,
        accomodation.ac_status,
        accomodation.ac_name,
        accomodation.ac_status,
        accomodation.ac_images
FROM    accomodation, accomodation_category
WHERE   accomodation.ac_status != 'draft'
        AND accomodation.ac_category = accomodation_category.acat_id
        AND accomodation_category.acat_slug != 'vendeglatohely'
        AND ac_images != 'b:0;'
ORDER BY
        RAND()
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

mysql random performance

88
推荐指数
2
解决办法
6万
查看次数

从mysql中的大表中快速选择随机行

从大型mysql表中选择随机行的快速方法是什么?

我在php工作,但我对任何解决方案感兴趣,即使它是用另一种语言.

mysql sql random select

45
推荐指数
4
解决办法
3万
查看次数

MySQL:选择随机输入,但是对某些条目的权重

我有一个MySQL表,里面有一堆条目,还有一个名为"Multiplier"的列.此列的默认(和最常见)值为0,但可以是任何数字.

我需要做的是随机从该表中选择一个条目.但是,行根据"乘数"列中的数字进行加权.值为0意味着它根本没有加权.值为1意味着它的加权值是两倍,就像条目在表中两次一样.值为2意味着它的加权值是其三倍,就像条目在表中三次一样.

我正在尝试修改我的开发人员已经给我的内容,很抱歉,如果设置没有多大意义.我可能会改变它,但希望保留尽可能多的现有表格设置.

我一直试图弄清楚如何使用SELECT和RAND(),但不知道如何进行加权.可能吗?

php mysql random select database-table

36
推荐指数
4
解决办法
1万
查看次数

如何随机选择学说

以下是我在数据库中查询某些单词的方法

$query = $qb->select('w')
    ->from('DbEntities\Entity\Word', 'w')
    ->where('w.indictionary = 0 AND w.frequency > 3')
    ->orderBy('w.frequency', 'DESC')
    ->getQuery()
    ->setMaxResults(100);
Run Code Online (Sandbox Code Playgroud)

我正在使用mysql,我想获得符合条件的随机行,我会在查询中使用rand()命令.

我发现这个类似的问题基本上表明,因为在学说中不支持ORDER BY RAND,你可以随机化主键.但是,这不能在我的情况下完成,因为我有一个搜索条件和一个where子句,以便不是每个主键都满足该条件.

我还发现了一个代码片段,建议你使用OFFSET随机化行,如下所示:

$userCount = Doctrine::getTable('User')
     ->createQuery()
     ->select('count(*)')
     ->fetchOne(array(), Doctrine::HYDRATE_NONE); 
$user = Doctrine::getTable('User')
     ->createQuery()
     ->limit(1)
     ->offset(rand(0, $userCount[0] - 1))
     ->fetchOne();
Run Code Online (Sandbox Code Playgroud)

我有点困惑的是,这是否会帮助我解决在我的情况下随机缺乏对订单的支持.我无法在setMaxResult之后添加偏移量.

知道如何实现这一目标吗?

php dql doctrine-orm

32
推荐指数
6
解决办法
5万
查看次数

如何通过单个查询快速从一个30k的MySQL表中选择3个随机记录?

嗯,这是一个非常古老的问题,从未得到真正的解决方案.我们想要一个表中有3个随机行,大约有30k记录.从MySQL的角度来看,这个表并不是很大,但如果它代表了商店的产品,那么它就具有代表性.例如,当在网页中呈现3个随机产品时,随机选择是有用的.我们想要一个满足以下条件的SQL字符串解决方案:

  1. 在PHP中,PDO或MySQLi的记录集必须正好有3行.
  2. 它们必须通过单个MySQL查询获得,而不使用存储过程.
  3. 解决方案必须很快,例如繁忙的apache2服务器,MySQL查询在很多情况下都是瓶颈.所以它必须避免临时表创建等.
  4. 3条记录必须不是连续的,即它们不得彼此相邻.

该表包含以下字段:

CREATE TABLE Products (
  ID INT(8) NOT NULL AUTO_INCREMENT,
  Name VARCHAR(255) default NULL,
  HasImages INT default 0,
  ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

WHERE约束是Products.HasImages = 1,仅允许获取具有可在网页上显示的图像的记录.大约三分之一的记录符合HasImages = 1的条件.

寻求完美,我们首先抛开存在缺陷的现有解决方案:


I. 使用ORDER BY RAND()的这个基本解决方案,

太慢但在每个查询中保证3个真正随机的记录:

SELECT ID, Name FROM Products WHERE HasImages=1 ORDER BY RAND() LIMIT 3;
Run Code Online (Sandbox Code Playgroud)

*CPU约0.10s,因WHERE子句扫描9690行,使用where; 使用临时; 在Debian Squeeze双核Linux机器上使用filesort,并不是那么糟糕

因为使用临时表和filesort而不能扩展到更大的表,并且在测试Windows7 :: MySQL系统上的第一个查询需要8.52秒.如此糟糕的表现,避免网页不是吗?


II.使用JOIN ... RAND()的riedsio的明亮解决方案,

MySQL中选择快速600K行的10个随机行,此处适用仅对单个随机记录有效,因为以下查询会产生几乎总是连续的记录.实际上,它只能在ID中随机获得3个连续记录:

SELECT Products.ID, Products.Name
FROM Products
INNER …
Run Code Online (Sandbox Code Playgroud)

php mysql random performance

19
推荐指数
1
解决办法
1万
查看次数

Hibernate Criteria API:获得n个随机行

我无法弄清楚如何从条件实例中获取n个随机行:

Criteria criteria = session.createCriteria(Table.class);
criteria.add(Restrictions.eq('fieldVariable', anyValue));
...
Run Code Online (Sandbox Code Playgroud)

那又怎样?我找不到任何带有Criteria API的文档

这是否意味着我应该使用HQL?

感谢名单!

编辑:我得到的行数:

int max = criteria.setProjecxtion(Projections.rowCount()).uniqueResult();
Run Code Online (Sandbox Code Playgroud)

如何获取索引在0到最大值之间的n个随机行?再次!

java mysql sql random hibernate

18
推荐指数
2
解决办法
2万
查看次数

从mysql表中选择随机行

可能重复:
在MySQL中选择随机行

我正在使用PHP和MySQL创建一个简单的Web应用程序.在其中,我需要以随机顺序从表中随机选择一小组行.我如何使用MySQL实现这样的功能?

php mysql sql

17
推荐指数
2
解决办法
3万
查看次数

在MySQL中选择随机行

我正在开发一个测验网站,我有一个存储所有问题的数据库.有不同类型的测验,如数学,科学,历史等.所有问题都存储在一个表中.

我的问题表看起来像这样:

questions ( qno(int)  ,type(int), question, .... ,... )
Run Code Online (Sandbox Code Playgroud)

qno是主键,type用于跟踪测验类型:

if type = 1 (math)
 type = 2(science)
Run Code Online (Sandbox Code Playgroud)

现在,我想为每种类型的测试选择一些随机问题.例如,我可能只想为数学测试选择一些随机的20个问题.

MySQL有某种方法可以选择随机行吗?

mysql sql

13
推荐指数
1
解决办法
2万
查看次数

MySQL选择随机行 - rand()性能

ORDER BY rand()与其他解决方案相比,性能是否真的很慢?如果是,有什么更好的方法从数据库中选择随机行?

我的查询:

SELECT sName FROM bpoint WHERE placeID=? ORDER BY rand() LIMIT 1; 
Run Code Online (Sandbox Code Playgroud)

php mysql

13
推荐指数
1
解决办法
6万
查看次数

标签 统计

mysql ×8

random ×6

php ×5

sql ×5

performance ×2

select ×2

database-table ×1

doctrine-orm ×1

dql ×1

hibernate ×1

java ×1