(3)mysql优化之sql语句优化
来源:互联网 发布:mac ox版本升级mac os 编辑:程序博客网 时间:2024/05/20 18:41
概述
该篇主要介绍一些常用的sql优化技巧
sql优化
1.select * from table_name where;
建议将*改为需要的列。这对速度不会有明显的影响,主要考虑节省内存。
2.like语句
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
3.不要在列上进行运算,无法运用索引
select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成
select * from users where adddate<‘2007-01-01’;
4.不使用NOT IN和<>操作
NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
5.为查询缓存优化你的查询
当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。
这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:
6.千万不要 ORDER BY RAND()
这样使用只让你的数据库的性能呈指数级的下降。这里的问题是:MySQL会不得 不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序。就算是你用了Limit 1也无济于事(因为要排序)。
7.limit huge_num,offset
在分页的时候,当huge_num比较大的时候,这样分页有一个很大的性能问题。我用‘limit 1000,20;’去1000-1020行的记录,会遍历1020行,然后前1000条记录都会被抛弃。
SELECT * FROM payment ORDER BY rental_id LIMIT 100,10;
思路一:使用子查询,按照索引分页后回表方式改写sql
SELECT * FROM payment a INNER JOIN (SELECT payment_id FROM payment ORDER BY rental_id LIMIT 100,10)b ON a.payment_id = b.payment_id;
思路二:使用between … and…
#不建议,用处不大SELECT * FROM payment WHERE rental_id BETWEEN 100 AND 110 ORDER BY rental_id;
思路三:和开发人员协商,翻页过程通过增加一个参数last_page_record,来记录上一页最后一行排序编号,然后通过该参数范围查找下一页的记录。
8.使用count(*),而不是count(id);
9.批量插入
insert into t(id,name) values(1,'test1');insert into t(id,name) values(2,'test2');insert into t(id,name) values(3,'test3');#改为insert into t(id,name) values(1,'test1'),(2,'test2'),(3,'test3');
10.order by 减少filesort排序,通过索引直接返回有序数据
参考
http://www.cnblogs.com/daxian2012/articles/2767989.html
http://blog.csdn.net/jetxt/article/details/5992360
- (3)mysql优化之sql语句优化
- mysql优化之sql语句优化
- MySql优化【3】--SQL语句优化
- Mysql sql语句优化
- mysql sql语句优化
- mysql优化sql语句
- mysql---SQL语句优化
- mysql优化sql语句
- MySQL 优化SQL语句
- mysql优化-sql语句
- MySQL SQL语句优化
- mysql------SQL语句优化
- 【mysql】sql语句优化
- Effective MySQL之SQL语句最优化
- Effective MySQL之SQL语句最优化
- [学习笔记]MySql之SQL语句优化
- Mysql之sql语句优化:explain
- MySQL 之 SQL 语句优化学习
- 基于echarts实现图表展示
- Internal Sorting: Binary insertion: Sorting by Insertion
- 第13周项目2—形状类族中的纯虚函数
- scala初探
- 柳暗花明又一春——致五月英语
- (3)mysql优化之sql语句优化
- 第十三周【项目3-立体类族共有的抽象类】
- AddressBook
- linux drm 架构
- Spring2.5学习2.2_编码剖析Spring依赖注入原理
- JS获取当前对象大小以及屏幕分辨率等
- iOS编程——类的继承
- Ping Pong 操作
- Android和OpenCV开发编程(1)图像灰度化和Canny检测