zoukankan      html  css  js  c++  java
  • mysql 简单的sql优化示例[不定时更新]

    对于慢sql的分析步骤:
    1) desc|explain sql 查看执行计划, 对于type很慢的, 分析是否建立了对应字段的索引
    2) 进行排除法, 把子查询抽离出来, 单独执行,定位慢查询是哪个子查询导致的. 专门进行优化.
     
    脚本:
    CREATE TABLE stu (
    id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    NAME VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名称',
    phone BIGINT(20) NULL COMMENT '电话',
    UNIQUE KEY idx_phone (phone)
    )ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试_学生表';
     
    CREATE TABLE course (
    id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    NAME VARCHAR(50) NOT NULL DEFAULT '' COMMENT '名称'
    )ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试_课程表';
     
    CREATE TABLE stu_course (
    id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    stu_id BIGINT(20) NOT NULL COMMENT '学生id',
    cous_id BIGINT(20) NOT NULL COMMENT '课程id',
    score INT(11) NOT NULL DEFAULT 0 COMMENT '分数',
    KEY idx_stu_id (stu_id),
    KEY idx_cous_id (cous_id)
    )ENGINE INNODB DEFAULT CHARSET utf8 COMMENT '测试_学生课程关联表';
     
    1. OR 变 UNION ALL
    前:
    SELECT id FROM stu WHERE id=10 OR id=20
    后:
    SELECT id FROM stu WHERE id=10
    UNION ALL
    SELECT id FROM stu WHERE id=20
     
    2. IN (子查询) 变 INNER JOIN
    前:
    SELECT id FROM stu WHERE id IN (SELECT stu_id FROM stu_course)
    后:
    SELECT id FROM stu s
    INNER JOIN (SELECT stu_id FROM stu_course) tmp ON s.id = tmp.stu_id
     
    3. NOT IN (子查询) 变 LEFT JOIN
    前:
    SELECT id FROM stu WHERE id NOT IN (SELECT stu_id FROM stu_course)
    后:
    SELECT id FROM stu s
    LEFT JOIN (SELECT stu_id FROM stu_course) tmp ON s.id = tmp.stu_id
    WHERE tmp.stu_id IS NULL
     
    4. IN 变 EXISTS
    前:
    SELECT id FROM stu WHERE id IN (SELECT stu_id FROM stu_course)
    后:
    SELECT id FROM stu s WHERE EXISTS (SELECT sc.stu_id FROM stu_course sc WHERE sc.stu_id = s.id)
     
     
  • 相关阅读:
    hadoop中的序列化
    web服务端的架构演变
    网易考拉规则引擎平台架构设计与实践
    spring分布式事务学习笔记(2)
    质量评估面面观--聊一聊软件上线前的质量评估
    用script标签加载
    Windows下命令行下启动ORACLE服务
    笔记本优化八项
    C#编程总结(一)序列化
    学习之路十四:客户端调用WCF服务的几种方法小议
  • 原文地址:https://www.cnblogs.com/duenboa/p/6665279.html
Copyright © 2011-2022 走看看