mysql密钥怎么使用_当我在哪里使用rand时,为什么我的mysql回答“不使用密钥”...

本文探讨了一位开发者在测试MySQL表性能时遇到的问题。他们尝试从包含4,000,000条记录的表中随机选取100条记录。初始尝试使用`WHERE user_id IN (1)`的查询被缓存,无法提供后续性能测试。随后,他们尝试通过`RAND()`函数随机选取用户ID,但此方法导致全索引扫描,显著降低了查询速度。作者寻求关于如何利用索引进行随机选取的建议,以提高查询效率。
摘要由CSDN通过智能技术生成

我有一张有4,000,000条记录的表 . 创建表:(user_id int,partner_id int,PRIMARY_KEY(user_id))engine = InnoDB;我想测试 select 100条记录的性能 . 然后,我测试了以下内容:

mysql> explain select user_id from MY_TABLE use index (PRIMARY) where user_id IN ( 1 );

+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------------+

| 1 | PRIMARY | MY_TABLE | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index |

+----+-------------+----------+-------+---------------+---------+---------+-------+------+-------------+

1 row in set, 1 warning (0.00 sec)

还行吧 . 但是,这个查询是由mysql缓冲的 . 因此,该测试在第一次测试后没有 .

然后,我想到了一个通过随机值选择的sql . 我测试了以下:

mysql> explain select user_id from MY_TABLE use index (PRIMARY) where user_id IN ( select ceil( rand() ) );

+----+-------------+----------+-------+---------------+---------+---------+------+---------+--------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+----------+-------+---------------+---------+---------+------+---------+--------------------------+

| 1 | PRIMARY | MY_TABLE | index | NULL | PRIMARY | 4 | NULL | 3998727 | Using where; Using index |

+----+-------------+----------+-------+---------------+---------+---------+------+---------+--------------------------+

但是,这很糟糕 . Explain 显示possible_keys为NULL . 因此,计划进行完整的索引扫描,事实上,它比以前的速度慢得多 .

然后,我想请教你如何用索引查找随机值 .

谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值