优先使用INNER JOIN

多表关联查询,扫描的行尽量少
        关联的时候下条件减少扫描的行数
SELECT
    ...
FROM
    ad_ad_summary_for_pos_eq sum4eq
INNER JOIN (SELECT id, NAME FROM wlw_area WHERE grade = 2) area ON area.id = position.city_id

避免使用SELECT * 
        你从你的表里返回每个列,甚至后期加的列。被传递到了线路上并被JDBC驱动器加载到 了内存中。如果你知道你只需要2-3列数据的话,这就造成了严重的IO和内存的浪费,对数据库执行计划的不良影响。《如何阻止SELECT
* 语句》 http://t.cn/RGmpdoJ,《Java开发者写SQL时常犯的10个错误》http://t.cn/RGm05ex

使用IN代替OR 
        两者结果是一样的,IN执行的速度比OR快,or的效率是n级别,in的消息时log(n)级别 ,in的个数建议控制在200以内《MySQL5.5
从零开始学》P197

如果可以尽量使用UNION ALL替代UNION
        UNION ALL执行所需要的时间少,确定查询结果中不会有重复的或不需要去重的优先使用ALL,《MySQL5.5 从零开始学》P223
OR改写为UNION
mysql的索引合并很弱智

select id from t where phone = ’159′ or name = ‘john’;

=>

select id from t where phone=’159′

union

select id from t where name=’jonh’


批量INSERT插入多条转为一条(分批次)

INSERT INTO t (id, nameVALUES(2,'Belle');
INSERT INTO t (id, nameVALUES(3,'Bernice');
----->
INSERT INTO t (id, nameVALUES(1,'Bea'), (2,'Belle'),(3,'Bernice');

分批次批量更新
        程序可以一次执行多条update语句

禁止不必要的ORDER BY排序
SELECT count(1) FROM user LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;
----->
SELECT count(1) FROM user LEFT JOIN user_info i ON u.id = i.user_id;

分组统计可以禁止排序
SELECT goods_id,count(*) FROM GROUP BY goods_id;
默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序。如果查询包括GROUP BY,想要避免排序结果的消耗,则可以指定ORDER BY NULL禁止排序。
----->
SELECT goods_id,count(*) FROM GROUP BY goods_id ORDER BY NULL;

避免随机取记录
SELECT FROM t1 WHERE 1=1 ORDER BY RAND() LIMIT 4;
MySQL不支持函数索引,会导致全表扫描
----->
SELECT FROM t1 WHERE id >= CEIL(RAND()*1000) LIMIT 4;
   

不使用子查询而使用关联查询
    SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang');修改为:
    SELECT t1.* FROM t1 JOIN t2 ON t1.id = t2.id;
       子查询虽然可以使查询语句很灵活,但是执行效率不高。执行子查询时,MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表。所以子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。
        在MySQL中,可以使用JOIN查询替代子查询。JOIN查询不需要建立临时表,其速度比子查询要快,如果查询中使用索引的话,性能会更好。JOIN之所以更有效率,是因为MySQL不需要在内存中创建临时表来完成查询工作。

避免函数索引
    SELECT * FROM t WHERE YEAR(d) >= 2016;修改为:
    SELECT * FROM t WHERE d >= '2016-01-01';

避免数据类型不一致
    SELECT * FROM t WHERE id = '19';
    SELECT * FROM t WHERE id = 19;

使用load data导数据
        load
data比insert快约20倍

参考:
1. 《MySQL5.5 从零开始学》
2. 赶集mysql军规
3. http://t.cn/RGFvnbY【SQL语句常见优化十大案例】

MySQL语句高效写法整理的更多相关文章

  1. MySql语句常用命令整理---多表查询

    首先第一张表还是我们单表查询之前用到t_employee,我们在另外新建一个表t_dept(部门表)建表命令如下: drop table if exists t_dept; CREATE TABLE ...

  2. MySql语句常用命令整理---单表查询

    初始化t_employee表 创建t_employee表 -- DROP TABLE IF EXISTS test; CREATE TABLE t_employee ( _id INTEGER PRI ...

  3. php中mysql语句的基本写法

    php中mysql语句的基本写法 php作为一门后台语言必须要与mysql数据库打交道,做到将内容存储到数据库以及数据库数据读写的操作,那么下面就来说下最近学习的一些东西: 在具体将之前先说一下编码的 ...

  4. mysql语句在node.js中的写法

    总结一下mysql语句在node.js中的各种写法,参考了npm网站mysql模块给的实例. 查询 select //1 db.query('select * from tuanshang_users ...

  5. 常用的MySQL语句写法

    常用的MySQL语句写法 MySQL的SQL语句写法,除了那些基本的之外,还有一些也算比较常用的,这里记录下来,以便以后查找.     好记性不如烂笔头,这话说的太有道理了,一段时间不写它,还真容易忘 ...

  6. MySQL 语句整理 2019-5-3

    MySQL 语句整理 在整理完Oracle的一些常见用语句后,由于MySQL的语法跟Oracle略有不同,随跟PN的MySQL视频进行了间接整理. 查询薪水大于1800, 并且部门编号为20或30的员 ...

  7. python 全栈开发,Day60(MySQL的前戏,数据库概述,MySQL安装和基本管理,初识MySQL语句)

    一.MySQL的前戏 在学习Mysql之前,我们先来想一下一开始做的登录注册案例,当时我们把用户的信息保存到一个文件中: #用户名 |密码 root|123321 alex|123123 上面文件内容 ...

  8. MySQL隐式转化整理

    MySQL隐式转化整理 前几天在微博上看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写的很不错,再加上自己之前也对MySQL的隐式转化这边并不是很清楚,所以就顺势整理了一下.希望对大家有所帮 ...

  9. 让dede运行php代码和mysql语句

    一.dede运行php代码 举例1: {dede:name runphp='yes'} $str = "hello ";@me = $str;@me .= "world& ...

随机推荐

  1. 自定义alert窗口样式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Kafka(转载)

    Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如Cloudera.Apache Storm.Spa ...

  3. 浅析java内存管理机制

    内存管理是计算机编程中的一个重要问题,一般来说,内存管理主要包括内存分配和内存回收两个部分.不同的编程语言有不同的内存管理机制,本文在对比C++和Java语言内存管理机制的不同的基础上,浅析java中 ...

  4. 重构:从Promise到Async/Await

    摘要: 夸张点说,技术的发展与历史一样,顺之者昌,逆之者亡.JS开发者们,赶紧拥抱Async/Await吧! GitHub仓库: Fundebug/promise-asyncawait 早在半年多之前 ...

  5. 渗透测试环境DVWA搭建

    一.DVWA介绍 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供 ...

  6. Go 语言基础语法

    Go 标记 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号.如以下 GO 语句由 6 个标记组成: fmt.Println("Hello, World!") ...

  7. Do a web framework ourselves

    step 1: from wsgiref.simple_server import make_server def application(environ, start_response): star ...

  8. Dubbo框架应用之(二)--服务治理

    Dubbo服务治理全貌图 当我们现有ITOO平台系统的业务随着用户的逐渐增大,设计的业务越来越广,系统会异常的复杂,在大规模服务之前,我们可以采用的是RMI或Hessian等工具,暴露和引用远程服务, ...

  9. Android自定义View(LimitScrollerView-仿天猫广告栏上下滚动效果)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/53303872 本文出自:[openXu的博客] 1分析 2定义组合控件布局 3继承最外层控件 ...

  10. React Native(一) FlexBox布局

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/53241550 本文出自:[余志强的博客] 在React Native ...