SQL基本语句的优化10个原则
原则一:尽量避免在列上进行运算,这样会导致索引失效。
例如:
SELECT * FROM table WHERE YEAR(d) >= 2011;
优化:
SELECT * FROM table WHERE d >= '2011-01-01';
原则二:使用JOIN时,应该用小结果集驱动大结果集。同时把复杂的JOIN查询拆分成多个Query。因为JOIN多个表时,可能导致更多的锁定和堵塞。
例如:
SELECT * FROM a JOIN b ON a.id = b.id
LEFT JOIN c ON c.time = a.date
LEFT JOIN d ON c.pid = b.aid
LEFT JOIN e ON e.cid = a.did
原则三:注意LIKE模糊查询的使用,避免%%。
例如:
SELECT * FROM table WHERE name LIKE '%de%';
优化:
SELECT * FROM table WHERE name >= 'de' AND name < 'df';
原则四:仅列出需要查询的字段,这对速度不会有明显的影响,主要考虑节省内存。
例如:
SELECT * FROM table;
优化:
SELECT id,name,pwd FROM table;
原则五:使用批量插入语句节省交互。
例如:
INSERT INTO t (id,name) VALUES(1,'a');
INSERT INTO t (id,name) VALUES(2,'b');
INSERT INTO t (id,name) VALUES(3,'c');
优化:
INSERT INTO t (id,name) VALUES(1,'a'), (2,'b'), (3,'c');
原则六:LIMIT 的基数比较大时使用 BETWEEN。
例如:
SELECT * FROM article ORDER BY id LIMIT 100000,10
优化:
SELECT * FROM article WHERE id BETWEEN 100000 AND 100010 ORDER BY id;
BETWEEN 限定比 LIMIT 快,所以在海量数据访问时,建议用 BETWEEN 或是 WHERE 替换掉 LIMIT 。但是 BETWEEN 也有缺陷,如果 id 中间有断行或是部分 id 不读取的情况,总读取的数量会少于预计数量! 在读取比较后面的数据时,通过 DESC 方式把数据反向查找,以减少对前端数据的扫描,让 LIMIT 的基数越少越好!
原则七:不要使用 RAND 函数获取多条随机记录。
例如:
SELECT * FROM table ORDER BY RAND() LIMIT 20;
使用下面的语句代替:
SELECT * FROM table AS t1
JOIN (
SELECT ROUND(RAND() * ((SELECT MAX(id) FROM table) - (SELECT MIN(id) FROM table)) + (SELECT MIN(id) FROM table)) AS id
) AS t2
WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 1;
这是获取一条随机记录,这样即使执行 20 次,也比原来的语句高效。或者先用PHP产生随机数,把这个字符串传给MySQL,MySQL里用IN查询。
原则八:避免使用NULL。
原则九:不要使用 COUNT(id) ,而应该是 COUNT(*)。
原则十:不要做无谓的排序操作,而应尽可能在索引中完成排序。
SQL基本语句的优化10个原则的更多相关文章
- 深入MySQL(四):MySQL的SQL查询语句性能优化概述
关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...
- MySQL基本语句优化10个原则
在数据库应用中,程序员们通过不断的实践总结了很多经验,这些经验是一些普遍适用的规则.每一个程序员都应该了解并记住它们,在构造SQL语句时,养成良好的习惯.以下10条比较重要的原则供大家参考. 原则1: ...
- SQL Server 查询性能优化——创建索引原则(二)
三:索引的建立原则 一般来说,建立索引要看数据使用的场景,换句话来说哪些访问数据的SQL语句是常用的,而这些语句是否因为缺少索引(也有可能是索引过多)变的效率低下.但绝不是所有的SQL语句都要建立索引 ...
- 一次SQL查询语句的优化
1.项目中之前的"我关注的拍品列表"需要添加筛选功能,因为目前显示的关注的拍品太多没有进行分类,用户体验差. 2.添加筛选条件之后,可以筛选出“未开始”“进行中”“已结束”三种情况 ...
- SQL Server 查询性能优化——创建索引原则
索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索引 ...
- SQL Server查询性能优化——创建索引原则(一)
索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页 就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索 ...
- SQL Server 查询性能优化——创建索引原则(一)(转载)
索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索引 ...
- SQL Server 查询性能优化——创建索引原则(一)
索引是什么?索引是提高查询性能的一个重要工具,索引就是把查询语句所需要的少量数据添加到索引分页中,这样访问数据时只要访问少数索引的分页就可以.但是索引对于提高查询性能也不是万能的,也不是建立越多的索引 ...
- SQL SERVER 查询性能优化——分析事务与锁(五)
SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...
随机推荐
- CSS House
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Android解析中国天气接口JSon数据,应用于天气查询!
android解析Json数据是比较常见的一种操作.也是客户端和服务器进行数据交互的桥梁.下面就来看一看在android中解析JSon数据的方法吧. 首先要想获得Json数据,就必须访问相关的网络接口 ...
- Volley网络框架完全解析(使用篇)
在Android中,网络请求无非就这两种:HttpURLConnection和HttpClient( Apache),我们在使用时一般都会对它们进行一系列的封装,但是这过程不免有些繁琐,所以,Goog ...
- UNIX环境高级编程——进程控制
一.进程标识符 ID为0的进程是调度进程,常常被称为交换进程.该进程是内核的一部分,它并不执行任何磁盘上的程序,因此也被称为系统进程.进程ID 1通常是init进程,在自举过程结束时由内核调用.ini ...
- [TCP] 网络协议流程图
之前在跟别人讲协议的时候总是找不到类似的图,这次再看python网络编程书籍的时候找到了一个,留存一份. 清晰的看到不同协议在不同层的传输过程!
- Miner.java 爬虫启动类
Miner.java 爬虫启动类 package com.iteye.injavawetrust.miner; import java.util.concurrent.ThreadPoolExecut ...
- Emotiv脑电设备与RDS机器人仿真初步测试
Emotiv脑电设备与RDS机器人仿真初步测试 在脑电设备相关算法进行真实机器人测试前,有必要进行大量仿真验证算法,节约开发时间. 这里给我启发的Emotiv使用所参考的一些网址. 官网:https: ...
- java中throw与throws
类或函数声明,用throws表示,函数体中,可能抛出的错误,后接多个. 1.系统自动抛出的异常 系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常. 2.语句抛出的异常 用户程序自定义的异常和 ...
- hive发杂数据结构的使用,struct,array,map
一个简单介绍http://jimi68.iteye.com/blog/980573 一般的复杂介绍:http://songpo-ath-taobao-com.iteye.com/blog/140513 ...
- Android官方技术文档翻译——IntelliJ 项目迁移
本文译自Android官方技术文档<Migrating from IntelliJ Projects>,原文地址:http://tools.android.com/tech-docs/ne ...