1.在表中建立索引,优先考虑where.group by使用到的字段。

2.查询条件中,一定不要使用select *,因为会返回过多无用的字段会降低查询效率。应该使用具体的字段代替*,只返回使用到的字段。

3.不要在where条件中使用左右两边都是%的like模糊查询,如:

SELECT * FROM t_order WHERE customer LIKE '%zhang%'

这样会导致数据库引擎放弃索引进行全表扫描。

优化:尽量在字段后面使用模糊查询。如下:

SELECT * FROM t_order WHERE customer LIKE 'zhang%'

4.尽量不要使用in 和not in,会造成全表扫描。如下:

SELECT * FROM t_order WHERE id IN (2,3)

SELECT * FROM t_order1 WHERE customer IN (SELECT customer FROM t_order2)

优化:

对于连续的数值,能用 between 就不要用 in ,如下:SELECT * FROM t_order WHERE id BETWEEN 2 AND 3

对于子查询,可以用exists代替。如下:SELECT * FROM t_order1 WHERE EXISTS (SELECT * FROM t_order2 WHERE t1.customer = t2.customer)

5.尽量不要使用or,会造成全表扫描。如下:

SELECT * FROM t_order WHERE id = 1 OR id = 3

优化:可以用union代替or。如下:

SELECT * FROM t_order WHERE id = 1

UNION

SELECT * FROM t_order WHERE id = 3

6.尽量不要在 where 子句中对字段进行表达式操作,这样也会造成全表扫描。如:

select id FROM t_order where num/2=100

应改为:

select id FROM t_order where num=100*2

7.where条件里尽量不要进行null值的判断,null的判断也会造成全表扫描。如下:

SELECT * FROM t_order WHERE score IS NULL

优化:

给字段添加默认值,对默认值进行判断。如:

SELECT * FROM t_order WHERE score = 0

8.尽量不要在where条件中等号的左侧进行表达式.函数操作,会导致全表扫描。如下:

SELECT * FROM t_order2 WHERE score/10 = 10

SELECT * FROM t_order2 WHERE SUBSTR(customer,1,5) = 'zhang'

优化:

将表达式.函数操作移动到等号右侧。如下:

SELECT * FROM t_order2 WHERE score = 10*10

SELECT * FROM t_order2 WHERE customer LIKE 'zhang%'

9.尽量不要使用where 1=1的条件

有时候,在开发过程中,为了方便拼装查询条件,我们会加上该条件,这样,会造成进行全表扫描。如下:

SELECT * FROM t_order WHERE 1=1

优化:

如果用代码拼装sql,则由代码进行判断,没where加where,有where加and

如果用mybatis,请用mybatis的where语法。

10.程序要尽量避免大事务操作,提高系统并发能力。

11.一个表的索引数最好不要超过6个,如果索引太多的话,就需要考虑一下那些不常使用到的列上建的索引是否有必要。

最新文章

  1. 导出数据到Excel --使用ExcelReport有感
  2. 初探XSS
  3. [Java编程思想-学习笔记]第3章 操作符
  4. oracle同一个数据库实例不同的用户之间的表、序列授权操作
  5. google project tango 学习笔记
  6. eclipse的shell相关插件
  7. Android编程: 环境搭建、基本知识
  8. 单引号,双引号 和 heredoc 初始化php字符串之间的区别
  9. 【BZOJ3196】Tyvj 1730 二逼平衡树
  10. CSS3学习之 transform 属性
  11. gulp压缩js
  12. java学习笔记 --- 条件,循环语句
  13. 开源的C#实现WebSocket协议客户端和服务器websocket-sharp组件解析
  14. vue-router的使用
  15. Oracle:解锁scott用户及设置密码
  16. python pprint模块
  17. vue使用动态渲染v-model输入框无法输入内容
  18. 谷歌浏览器内核Cef js代码整理(三) 字符串处理
  19. IE浏览器打不开网页的解决方法
  20. Postman高级应用——串行传参和动态传参详解

热门文章

  1. Ubuntu 开发环境搭建
  2. js 预解析以及变量的提升
  3. myshell
  4. Spark 基础 —— 创建 DataFrame 的三种方式
  5. 实用的Python库
  6. git基本操作及设置
  7. 四行公式推完神经网络BP
  8. linux 查看某个目录下文件的数量
  9. C++中的常量指针和指针常量
  10. VISIO 2016安装破解