MySQL查询优化

1. COUNT与LIMIT

  COUNT(*) 计算满足条件的记录行数,COUNT(col)计算满足条件的且col非空的记录行数

  LIMTI n 在满足条件的记录中查询n条,发现n条后停止扫描

  需要判断记录是否存在时可以用LIMIT取代COUNT,LIMIT 1 找到记录就会停止

复制代码
mysql> select count(id) from test where tkey='1pNEFf3mudsuVYVxK0AMZs9cqnpJkf5y' \G
*************************** 1. row ***************************
count(id): 1
1 row in set (1.92 sec)

mysql> select id from test where tkey='1pNEFf3mudsuVYVxK0AMZs9cqnpJkf5y' limit 1 \G
*************************** 1. row ***************************
id: 1500000
1 row in set (0.85 sec)

mysql> select exists(select id from test where tkey='1pNEFf3mudsuVYVxK0AMZs9cqnpJkf5y') \G
*************************** 1. row ***************************
exists(select id from test where tkey='1pNEFf3mudsuVYVxK0AMZs9cqnpJkf5y'): 1
1 row in set (0.85 sec)
复制代码

2.ORDER BY RAND()

  随机取数据时使用ORDER BY RAND()效率极低,可以使用其它方式来实现,如取随机数交给程序或者函数去做,或者使用RAND()随机取一条再UNION也会比RAND()快很多

复制代码
数据量大时该方法速度极其慢
mysql> select * from test where id < 2000000 order by rand() limit 1 \G
*************************** 1. row ***************************
id: 1145236
tname: bSCkE5j9DASrqENRN
tstat: 0
tkey: tDAPfzXUyRvK3T9SOfElE0YFe2icZaGN
tsort: 59.42
sid: 2
created_ts: 2011-12-15 11:59:52
1 row in set (1 min 37.10 sec)

拷贝网络上他人SQL 随机取一条记录, 速度挺快.
mysql> SELECT *
-> FROM `test` AS t1 JOIN ( SELECT ROUND ( RAND () * (( SELECT MAX( id ) FROM `test` ) - ( SELECT MIN( id ) FROM `test`))
-> + ( SELECT MIN( id ) FROM `test` )) AS id ) AS t2
-> WHERE t1 . id >= t2 . id
-> ORDER BY t1 . id LIMIT 1 \G
*************************** 1. row ***************************
id: 3248895
tname: ujVxM89euDxEtdyVO97YoRX5moHa
tstat: 2
tkey: ixEvojbRAd9XbQy3rV8J7fGxvIS8QFF8
tsort: 37.81
sid: 5
created_ts: 2011-12-15 15:31:47
id: 3248895
1 row in set (0.03 sec)
复制代码




posted on   BobbyPeng  阅读(1449)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

统计

点击右上角即可分享
微信分享提示