基本语句优化10个原则

在数据库的应用中,程序员们通过不断地实践总结了很多经验,这些经验是一些普遍适用 的规则。每一个程序员都应该了解并记住它们,在构造SQL时,养成良好的习惯。以下列举10个比较重要的原则供大家参考。

原则1 : 尽量避免在列上进行运算,这样会导致索引失效。

例如原句为:

SELECT * FROM t WHERE YEAR(d) >= 2011;
优化为:
SELECT * FROM t WHERE d >= ‘2011-01-01‘;

原则2 : 使用JO IN时,应该用小结果集驱动大结果集。同时把复杂的JO IN查询拆分成多 个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

原则3 : 注意L IK E模糊查询的使用,避免% %。

例如原句为:

SELECT * FROM t WHERE name LIKE ‘%de%‘
优化为:
SELECT * FROM t WHERE name>=‘de‘ AND name<‘df‘

原则4 : 仅列出需要查询的字段,这对速度不会有明显影响,主要考虑节省内存。

例如原句为:

SELECT * FROM Member;
优化为:
SELECT id,name,pwd FROM Member;

原则5 : 使用批量插入语句节省交互。

例如原句为:

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‘);

原则6: limit的基数比较大时使用between。

例如原句为:

select * from article as article order by id limit 1000000,10
优化为:
select * from article as article where id between 1000000 and 1000010 order by id

between限定比limit快,所以在海量数据访问时,建议用between或是where替换掉limit。

但是between也有缺陷,如果id中间有断行或是中间部分id不读取的情况,总读取的数量会少

于预计数量!

在取比较后面的数据时,通过desc方式把数据反向查找,以减少对前段数据的扫描,让

limit的基数越小越好!

原则7 : 不要使用rand函数获取多条随机记录。例如: 

select * from table order by rand() limit 20;
使用下面的语句代替:
SELECT * FROM ‘table‘ AS tl JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM ‘table‘)-(SELECT MIN(id) FROM ‘table‘))+(SELECT MIN(id) FROM ‘table‘)) AS id ) AS t2 WHERE tl.id>=t2.id ORDER BY tl.id LIMIT 1;

这是获取一条随机记录,这样即使执行2 0次,也比原来的语句髙效。或者先用P H P产生

随机数,把这个字符串传给MySQL, MySQL里用in查询。

原则8 : 避免使用NULL。 

原则9 : 不要使用count(id), 而应该是count( * )。 

原则1 0 :不要做无谓的排序操作,而应尽可能在索引中完成排序。 

时间: 2024-12-13 19:03:23

基本语句优化10个原则的相关文章

MySQL基本语句优化10个原则

在数据库应用中,程序员们通过不断的实践总结了很多经验,这些经验是一些普遍适用的规则.每一个程序员都应该了解并记住它们,在构造SQL语句时,养成良好的习惯.以下10条比较重要的原则供大家参考. 原则1:尽量避免在列上做运算,这样会导致索引失败.例如原句为: SELECT * FROM t WHERE YEAR(d) >= 2011; 优化为:  SELECT * FROM t WHERE d >= '2011-01-01'; 原则2:使用join时,应该用小结果集驱动大结果集.同时把复杂的joi

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

基本语句优化的10个原则

数据库的优化主要包括两个方面,一方面是SQL程序语句的优化,另一方面是数据库服务器和配置的优化.查询语句优化主要涉及两个方面:一些普遍遵循的原则,以及怎样对查询语句进行性能分析. 在数据库的应用中,程序员通过不断地实践总结了很多经验,这些经验是一些普遍适用的规则.每个程序员都应该了解并记住它们,在构造SQL时,养成良好的习惯.以下列举10个比较重要的原则. 原则1:尽量避免在列上做运算,这样会导致索引失败.例如原句为: SELECT * FROM t WHERE YEAR(d) >= 2011;

对SQL Server SQL语句进行优化的10个原则

1.使用索引来更快地遍历表. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存放在数据页上.合理的索引设计要建立在对各种查询的分析和预测上.一般来说:①.有大量重复值.且经常有范围查询(between, >,< ,>=,< =)和order by.group by发生的列,可考虑建立群集索引:②.经常同时存取多列,且每列都含有重复值可考虑建立组合索引:③.组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列. 2.IS NUL

MySQL 查询语句优化思路

query 语句的优化思路和原则主要提现在以下几个方面:1. 优化更需要优化的Query:2. 定位优化对象的性能瓶颈:3. 明确的优化目标:4. 从 Explain 入手:5. 多使用profile6. 永远用小结果集驱动大的结果集:7. 尽可能在索引中完成排序:8. 只取出自己需要的Columns:9. 仅仅使用最有效的过滤条件:10. 尽可能避免复杂的Join和子查询 关于explain 用法:explain select * from tables1 where 1 ... 先看一下在

数据库性能优化之SQL语句优化

一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一.系统优化中一个很重要的方面就是SQL语句的优化.对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提高系统的可用性. 在多数情况下,Oracle使用索

python笔记-python编程优化:常用原则和技术介绍

本人翻译自<Exper Python Programming> 'Premature optimization is the root of all evil in programming' -Donald Knuth    优化的三原则      让它跑起来先 一个非常常见的错误就是在编写代码之初我们就开始对代码进行优化.让人伤心的是这通常做的都是无用功,很多软件只有你跑起来了才会发现它真正的瓶颈在哪里. 站在用户的视角看问题 曾经有一个团队为了自己的项目跑起来更快加班加点最终达到了自己满意

SQL优化的若干原则

SQL语句:是对数据库(数据)进行操作的惟一途径:消耗了70%~90%的数据库资源:独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低:可以有不同的写法:易学,难精通. SQL优化:固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高.应该编写与其格式一致的语句,包括字母的大小写.标点符号.换行的位置等都要一致 ORACLE优化器:在任何可能的时候都会对表达式进行评估,并且把特定的语法结构转换成等价的结构,这么做的原因是要么结果表达式能够比

数据库性能优化之SQL语句优化1

一.问题的提出 在 应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实 际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一.系统优化中一个很重要的方面就是SQL语句的优化.对于海 量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其功能就可,而是要写出高质量的SQL语句,提 高系统的可用性. 在多数情况下,Oracl