表示 进入内容 11018
下一步 8 较早的记录 »
Displaying posts with tag: sql优化 (reset)
记一个 MySQL 5.6 排序数据丢失的诡异现象

按照第一条的 SQL 查询 4 条数据,ID 分别为 3、2、4、1 然后按照第 2、3 条 SQL 进行同样的排序条件以及分页查询,预期的结果应该是 3、2 和 4、1 但是执行结果如下: ID 为 2 的数据竟然不见了,目前暂时通过 date desc, id desc 两个组合排序解决了此问题,但是又带来了新的问题,这样排序会导致索引实效。

【mysql】  【SQL】  【排序】  【Image】  【解决方案】   …

[获取更多]
数据管理DMS 全量SQL诊断:你的SQL是健康的蓝色,还是危险的红色?

使用MySQL数据库的用户,不可避免都会遇到下面三个难题: 1、历史问题难定位——数据库凌晨3点发生了CPU 100%的告警,但是该时间段却没有任何慢SQL,怎么继续查找原因?

2、SQL压测模版难获取——下周要进行大促压测,DBA只能找业务方一个个的收集SQL模版、执行频率,这种方式效率低,并且无法保证正确性;

3、慢SQL是否要优化——不是所有的慢SQL都需要第一优先级优化,用户迫切需要知道数据库上哪些SQL最消耗资源,优化这些SQL,才可以提高实例的稳定性;

全量SQL诊断可以快速的解决上述问题。

【阿里云】  【mysql】   …

[获取更多]
CloudDBA初体验:SQL优化建议

CloudDBA帮助阿里云客户自动优化SQL语句

【mysql】  【数据库优化】  【SQL优化】  【CloudDBA】  【SQL重写】  【数据库诊断】   点击查看原文>

CloudDBA初体验:SQL优化建议

阿里云CloudDBA 帮助用户自动优化SQL

【性能优化】  【阿里云】  【mysql】  【性能】  【SQL】  【数据库】  【用户体验】  【ATA】  【数据库优化】   …

[获取更多]
[MySQL 5.6优化] -- limit x,x 优化

待优化SQL: select `t1`.`order_sn` as `orderSn`, `t1`.`pay_platform_order_sn` as `payPlatformOrderSn`, `t1`.

【云栖社区】  【mysql】  【SQL】  【索引】  【varchar】  【limit】  【range】  【SQL优化】   …

[获取更多]
基于MYSQL、R语言、SHINY的中型企业电子商务中心业务分析周报系统

基于MYSQL、R语言、SHINY的中型企业电子商务中心业务分析周报系统

【阿里云】  【mysql】  【电商】  【数据结构】  【SQL优化】  【经营分析】   点击查看原文>

优化案例 | CASE WHEN进行SQL改写优化

导读

今天给大家分享一个通过SQL改写而独辟蹊径的SQL优化案例

待优化场景

发现SLOW QUERY LOG中有下面这样一条记录:

...
# Query_time: 59.503827  Lock_time: 0.000198  Rows_sent: 641227  Rows_examined: 13442472  Rows_affected: 0
...
select uid,sum(power) powerup from t1 where 
date>='2017-03-31' and 
UNIX_TIMESTAMP(STR_TO_DATE(concat(date,' ',hour),'%Y-%m-%d %H'))>=1490965200 and 
UNIX_TIMESTAMP(STR_TO_DATE(concat(date,' ',hour),'%Y-%m-%d %H'))<1492174801  and 
aType in (1,6,9) group by uid;

实话说,看到这个SQL我也忍不住想骂人啊,究竟是哪个脑残的XX狗设计的?

竟然把日期时间中的 date 和 hour 给独立出来成两列,查询时再合并成一个新的条件,简直无力吐槽。

吐槽归吐槽,该干活还得干活,谁让咱是DBA呢,SQL优化是咱的拿手好戏不是嘛~

SQL优化之路 …

[获取更多]
[MySQL SQL优化系列]之如何高效获取随机数据

起因

前几天有位同事问我MySQL要怎么返回一张表的几行随机数据。这个问题其实网上随便一搜答案一大把,但是效果都不太理想,当你要获取随机几行(不是1行)时,得到的数据不是全随机的,而是随机区域。那么有没有办法真正的返回全随机的数据呢?

分析

一般来说获取随机数据,我们第一时间想到的应该是rand()函数。最直接的是order by rand() limit n,这完全能够符合我们的需求,但是效率之地令人发指。我们来看看手册里面是怎么对这个函数描述的:

Returns a random floating-point value v in the range 0 <= v < 1.0.

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers …

[获取更多]
[MySQL SQL优化系列]之如何高效获取随机数据

起因

前几天有位同事问我MySQL要怎么返回一张表的几行随机数据。这个问题其实网上随便一搜答案一大把,但是效果都不太理想,当你要获取随机几行(不是1行)时,得到的数据不是全随机的,而是随机区域。那么有没有办法真正的返回全随机的数据呢?

分析

一般来说获取随机数据,我们第一时间想到的应该是rand()函数。最直接的是order by rand() limit n,这完全能够符合我们的需求,但是效率之地令人发指。我们来看看手册里面是怎么对这个函数描述的:

Returns a random floating-point value v in the range 0 <= v < 1.0.

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.

RAND() is not meant to be a perfect random generator. It is a fast way to generate random numbers …

[获取更多]
[MySQL SQL优化系列]之分页查询

记得在很久以前我在公司内部做过一次MySQL优化分享里面说到一个使用延迟关联实现排序分页类型SQL的优化,这个案例在《高性能MySQL》的第二版还是第三版也有提及。

延迟关联:通过覆盖索引返回所需数据行的主键,再通过主键获取所需数据。

这里我们来看一个使用延迟关联优化排序分页SQL的案例:

123456789101112131415
      mysql> select sql_no_cache * from t_user_log where appname = '发号中心' order by logintime limit 1000000,1;+---------+-----------+--------------------------+--------------+-----------------+------------------------------------+------------+-----------+-----------+| id      | uid       | username                 | appname      | loginip         | loginlocation                      | logintime  | logintype | useragent …
[获取更多]
表示 进入内容 11018
下一步 8 较早的记录 »