zoukankan      html  css  js  c++  java
  • mysql 优化

    1. 查询

    1-1 group by 比distinct 快

    [SQL]select driver_id from XXX where created_time > '2017-12-27 00:00:00' and created_time<'2017-12-28 00:00:00' group by driver_id
    受影响的行: 0
    时间: 0.418s
    =============

    [SQL]select DISTINCT(driver_id) from XXX where created_time > '2017-12-27 00:00:00' and created_time<'2017-12-28 00:00:00'
    受影响的行: 0
    时间: 0.556s

    1-2 where 条件顺序 先过滤掉最多的、过滤最快的(int 比varchar快 比timestamp快)

    [SQL]select driver_id,integral,source,city_id from XXX where created_time > '2017-12-27 00:00:00' and created_time<'2017-12-28 00:00:00' and driver_id=216654
    受影响的行: 0
    时间: 0.030s

    ==========

    [SQL]select driver_id,integral,source,city_id from XXX where driver_id=216654 and created_time > '2017-12-27 00:00:00' and created_time<'2017-12-28 00:00:00'
    受影响的行: 0
    时间: 0.017s

    1-3  日期函数处理

    sql中经常有日期函数的使用 其中‘2018-03-01’、‘2018-03’一般为传递到持久层框架的参数

    select * from driver_XXX where DATE_FORMAT(created_time,'%Y-%m-%d')== '2018-03-01'

    select * from driver_XXX where DATE_FORMAT(created_time,'%Y-%m')= '2018-03'

    此时 created_time字段的索引不会使用!!!

    explain 查看执行计划 扫描行数 几乎全表

    更改为

    select * from driver_XXX where created_time BETWEEN '2018-03-01' and DATE_ADD('2018-03-01',INTERVAL 1 DAY)

    select * from driver_XXX where created_time BETWEEN concat('2018-03','-01') and DATE_ADD(concat('2018-03','-01'),INTERVAL 1 MONTH)

    再次执行explain 扫描行数有显著减少!!!

  • 相关阅读:
    汇编(一)续
    汇编(一)
    Ubuntu 安装配置Dosbox
    Linux系统安装Dos系统(虚拟机里装)
    .bundle文件如何安装
    Linux(Fedora)系统下配制8086汇编环境
    Linux常用命令
    linux下安装nginx
    缓存雪崩、缓存穿透、缓存击穿是什么?如何解决?
    Maven 实战
  • 原文地址:https://www.cnblogs.com/rocky-fang/p/8384082.html
Copyright © 2011-2022 走看看