文档章节

常用数据库优化

learn_more
 learn_more
发布于 2015/05/09 18:00
字数 628
阅读 184
收藏 21

    

    数据库优化自然是我们经常需要注意的地方,尤其使用mybatis的人知道,XML中sql一目了然,一旦你的sql写的不够超前,就会受到别人的指点,说这个可以这样改改,那个可以那样改改。起初,对于老程序员的指指点点本人总是不以为然,后面渐渐就发现,有些基础东西我们必须去学会、去运用。

    数据库的优化自然是一个很深奥的东西,尤其是Oracle。这里就不讨论那些深奥有难懂的东西了,本人使用Sqlserver 、PostgreSQL 、MySQL 等,所以,这些关系型数据库的优化大多是差不多了,这里指给出最常见,最基础的东西;


  第一类问题:查询语句中尽量减少全表扫描

查询缓慢很多都是因为语句执行时引擎放弃索引搜索而直接采用了全表扫描,具体如下:

1、where 条件 以及 order by 涉及的列应该为该列建立索引

2、where 条件中避免对字段进行null判断,所以建议为字段设置默认值

3、where 条件中避免使用or,建议使用union all 替代 or

4、where 条件中避免使用 in not in ,本周就是or,建议使用exist 代替

5、where 条件中避免使用 like ‘%some%’,模糊查询或者使用like都会全表检索

6、where 条件中避免运算或函数操作,应该把运算放在关系条件的右边,等待预编译计算

7、where 条件中避免使用1=1,尽管这样处理在代码中是非常灵活的

8、count(*)应该改成count(1)

    第二类问题:其他优化,以及个人建议

9、varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,其次对于查询来说,在一个相对较小的字段内搜索效率要高些。

10、delete insert update 都会进行锁表,所以对于经常进行查询的关系,应该尽量把经常操作的字段和经常查询的字段进行分离成两个关系分别存储

11、尽量少使用select *,没用的字段不需要返回


© 著作权归作者所有

共有 人打赏支持
learn_more
粉丝 92
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
Oracle性能优化之性能调整_超越OCP精通Oracle视频教程培训38

Oracle性能优化之性能调整超越OCP精通Oracle视频教程培训38 课程介绍 风哥Oracle视频教程<>的第8/10套:Oracle性能优化之性能调整。学习Oracle性能优化,性能调整必备知识讲解 ,操作系统优化调...

风哥Oracle
06/28
0
0
2017年底,公司招聘Android开发技术要求热点--数据来自各名企

天冷被迫穿上秋裤了,转眼来到2017年底,又快到一年一度的春季跳槽季了,大家有怎样的想法和准备呢? 突发奇想,秉着对市场招聘Android的行情进行一番简单调研,从拉钩网上截取了当前正在招聘...

翻滚吧李博
2017/12/05
0
0
MySQL数据库优化学习笔记

------------数据库优化学习笔记0502------------ 0:优化的目的 --避免出现页面访问出错 由于数据库连接超时产生的页面5xx错误 由于查询过慢造成的页面无法加载 *由于阻塞造成的数据提交异常...

雨醉风尘
2016/05/04
24
0
Java基础面试题

1 用过jdk8吗?了解函数式编程吗?NIO了解吗?2 CopyOnWrite应用场景?3 如何java实现互斥锁?zk实现分布式队列?4 数据库优化方式? 数据库索引有哪些,区别。5 如何保证一个类是线程安全的...

HappyBoyLi
2017/12/13
0
0
Windows Mobile 开发系列文章收藏 - SQLite

Sqlite介绍 SQLite数据库 牛腩学习sqlite - 简记 概述介绍 SQLite入门与分析(一)---简介 SQLite入门与分析(二)---设计与概念 SQLite数据库扫盲 SQLite内存使用情况分析 SQLite常用资源 SQLi...

长征2号
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
2
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
4
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部