相关疑难解决方法(0)

如何优化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中的大表中快速选择随机行

我已经看到使用这样的查询拉取随机行,这对于大型数据集来说效率很低.

SELECT id FROM table ORDER BY RANDOM() LIMIT 1
Run Code Online (Sandbox Code Playgroud)

我还看到了其他各种与MySQL无关的RDBMS特定解决方案.

我能想到的最好的事情就是使用两个查询并执行类似的操作.

  1. 获取表中的行数.MyISAM表存储行数,因此速度非常快.
  2. 计算0和rowcount - 1之间的随机数.
  3. 选择按主键排序的行,使用LIMIT randnum,1

这是SQL:

SELECT COUNT(*) FROM table;
SELECT id FROM table LIMIT randnum, 1;
Run Code Online (Sandbox Code Playgroud)

有没有人有更好的主意?

mysql random

9
推荐指数
0
解决办法
1873
查看次数

优化我的mysql语句! - 兰德()太慢了

所以我有一个包含超过80,000条记录的表,这一条称为系统.我还有另一个名为follow的表.

我需要我的语句从系统表中随机选择记录,其中该id尚未列在当前用户标识下的下表中.

所以这就是我所拥有的:

    SELECT system.id, 
           system.username, 
           system.password, 
           system.followed, 
           system.isvalid, 
           follows.userid, 
           follows.systemid
      FROM system
  LEFT JOIN follows ON system.id = follows.systemid
                   AND follows.userid = 2 
      WHERE system.followed = 0 
        AND system.isvalid = 1
        AND follows.systemid IS NULL
   ORDER BY RAND()
      LIMIT 200
Run Code Online (Sandbox Code Playgroud)

现在它完美无瑕,除了它需要大约一分钟才能开始处理他们所选择的记录.到这个时候,脚本通常会超时并且没有任何反应.

有人可以告诉我如何重做这个,所以同样的想法已经完成,但它没有使用兰德的命令?这似乎减慢了一大堆.

谢谢!

mysql sql random

9
推荐指数
2
解决办法
5836
查看次数

ORDER BY RAND()替代方案

可能重复:
MySQL:ORDER BY RAND的替代品()

我目前有一个查询结束,ORDER BY RAND(HOUR(NOW())) LIMIT 40以获得40个随机结果.结果列表每小时更改一次.

这会终止查询缓存,这会破坏性能.

你能否建议另一种方法来获得随时变化的随机(ish)结果集?它不一定是每个小时,也不一定是完全随机的.

我更喜欢随机结果,而不是在表格中的任意字段上排序,但我会这样做作为最后的手段......

(这是我想要随时改变的新产品列表).

mysql random performance

7
推荐指数
3
解决办法
5119
查看次数

如何为每个组选择固定数量的行?

这是mysql表中的一些示例数据

a   b   distance
15  44  250
94  31  250
30  41  250
6   1   250
95  18  250
72  84  500
14  23  500
55  24  500
95  8   500
59  25  500
40  73  500
65  85  500
32  50  500
31  39  500
22  25  500
37  11  750
98  39  750
15  57  750
9   22  750
14  44  750
69  22  750
62  50  750
89  35  750
67  65  750
74  37  750
52 …
Run Code Online (Sandbox Code Playgroud)

mysql sql analytic-functions

7
推荐指数
1
解决办法
1806
查看次数

检索随机项时MySQL与PHP

哪个更有效(管理超过100K记录时):

A. Mysql

SELECT * FROM user ORDER BY RAND();
Run Code Online (Sandbox Code Playgroud)

当然,之后我已经拥有该记录的所有字段.

B. PHP

使用memcached让$ cache_array保存"SELECT id_user FROM user ORDER BY id_user"中的所有数据1小时左右......然后:

$ id = array_rand($ cache_array);

当然,之后我必须通过以下方式进行MYSQL调用:

SELECT * FROM user WHERE id_user = $id;
Run Code Online (Sandbox Code Playgroud)

所以...哪个更有效率?A还是B

php mysql

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

SQL:如何随机选择并按最高顺序排序

我的架构看起来像这样:

CREATE TABLE users 
    (
     id int auto_increment primary key, 
     name varchar(20), 
     point int(255)
    );

INSERT INTO users
(name, point)
VALUES
('Jack', 1),
('Rick', 5),
('Danny', 11),
('Anthony', 24),
('Barla', 3),
('James', 15),
('Melvin', 12),
('Orthon', 5),
('Kenny', 2),
('Smith', 30),
('Steven', 27),
('Darly', 45),
('Peter', 44),
('Parker', 66),
('Lola', 78),
('Jennifer', 94),
('Smart', 87),
('Jin', 64),
('David', 31),
('Jill', 78),
('Ken', 48),
('Martin', 19),
('Adrian', 20),
('Oliver', 16),
('Ben', 100);
Run Code Online (Sandbox Code Playgroud)

我的sql是:

select id, name, point from users Order by …
Run Code Online (Sandbox Code Playgroud)

mysql sql random

3
推荐指数
1
解决办法
295
查看次数

帮助创建一个相当复杂的sql语句

嘿大家,我不太确定如何以谷歌搜索的形式描述这个,所以我决定来这里看你们是否可以提供帮助.基本上,我想知道如何将以下伪sql转换为实际的mysql查询:

Select one random row 
  from `posts` 
 where (the user's id, which is supplied by the script) is not found in the `votes` table 
        with a post id of (the selected post's id).
Run Code Online (Sandbox Code Playgroud)

如果你能提供帮助,非常感谢你.

mysql sql

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

在mySql查询中获取随机值

我有一个查询,在数据库中选择6个名称.例如

SELECT names FROM users LIMIT 6
Run Code Online (Sandbox Code Playgroud)

现在我希望这个查询在数据库表中选择一个随机的6个名字,这可能吗?如何

mysql

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

MySQL的.随机行.将行转换为PHP数组.

我有一个包含四列的MySQL表submited_name, submited_URL, submited_type, uniqueID.在这张表中我有大约1000条记录.我需要选择10个随机条目.问题是我需要将选定的随机值拆分为单独的PHP数组.每列一个.我的数组看起来像这样:

$ten_random_names = array ('name26', 'name55', 'name107', ect.);
$ten_random_URL = array ('url for name26', 'url for name55', 'url for name107', ect..);
$ten_random_types = array ('type for name26', 'type for name55', 'type for name107', ect..);
Run Code Online (Sandbox Code Playgroud)

php mysql

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

标签 统计

mysql ×11

random ×6

sql ×5

performance ×2

php ×2

analytic-functions ×1

select ×1