数据库优化原则

最近数据库课程设计,我总结了一下数据库的优化方法,希望对有需要的人能有帮助:

1.对查询进行优化,尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

    select id from p where num is null

  可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

    select id from p where num=0

3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

    select id from p where num=8 or num=12

  可以这样查询:

    select id from p where num=8
    union all
    select id from p where num=12

5.in 和 not in 也要慎用,否则会导致全表扫描,如:

    select id from p where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

    select id from p where num between 1 and 3

6.下面的查询也将导致全表扫描:

   select id from p where name like '%abcd%'

  若要提高效率,可以考虑全文检索。

7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

    select id from p where [email protected]

可以改为强制查询使用索引:

    select id from p with(index(索引名)) where num= @number

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

    select id from t where num/2=10

应改为:

select id from t where num=10*2

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)=‘abc‘--name以abc开头的id

  select id from t where datediff(day,createdate,‘2014-12-30‘)=0--‘2014-12-30’生成的id

10.主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低、单独或者组合查询可能性大的字段放在前面。

11.数据类型尽量用数字型,数字型的比较比字符型的快很多。

12.数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的。

13.尽量不要允许NULL,除非必要,可以用默认值代替。

14.少用TEXT和IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用。

15.自增字段要慎用,不利于数据迁移。

16.适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。

17.一个表不要加太多索引,因为索引影响插入和更新的速度。

18.适当的使用冗余的反范式设计,以空间换时间有的时候会很高效。

19.联表查询的时候,记得把小结果集放在前面,遵循小结果集驱动大结果集的原则。

20.查询尽可能使用limit减少返回的行数,减少数据传输时间和带宽浪费。

时间: 2024-10-17 18:22:42

数据库优化原则的相关文章

数据库优化的“二五五二”原则

数据库优化对于实际项目开发有着非常重要的意义,笔者根据自己的学习将数据库的优化总结为以下的“二五五二”原则. “二五五二”原则将数据库的优化划分为四个部分,即分析.设计.实现.运维. 分析阶段(二): ①根据项目需求,分析系统的性能以及需要的硬件条 件. ②根据需求,判断该系统属于OLTP还是OLAP. 设计阶段(五): ①存储环境的物理设计. ②设计合理的索引和视图. ③合理使用冗余,即表的规范化与反规范化处理. ④选择合适的数据类型. ⑤合理设置主外键约束以及其它约束. 实现阶段(五): ①

单机数据库优化的一些实践(mysql)

数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问起,一步一步问到分库分表,中间会穿插很多数据库优化的问题.本文试图描述单机数据库优化的一些实践,数据库基于mysql,如有不合理的地方,欢迎指正. 1.表结构优化 在开始做一个应用的时候,数据库的表结构设计往往会影响应用后期的性能,特别是用户量上来了以后的性能.因此,表结构优化是一个很重要的步骤.

MySQL数据库存储引擎与数据库优化

存储引擎 (1)MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就成为存储引擎. 每种存数引擎使用不同的存储机制.索引技巧.锁定水平,最终提供广泛且不同的功能. (2)使用不同的存储引擎也可以说不同类型的表 (3)MySQL支持的存储引擎 MyISAM InnoDB Memory CSV Archive 查看数据表的创建语句: SHOW CREATE TABLE 表名 相关概念: (1).并发控制:一个人读数据,另外一个人在删除这个数据. 当多个连接对记录进行修改时保证数据的一致性

数据库优化处理

数据库的优化程度影响了一个程序的执行力和用户的体验感,所以数据库的优化显得格外重要. 一.框架 根据业务需求选择合适的开发框架,不近对数据库的优化有帮助,而且对于程序后期的维护也很有帮助,根据项目的需求,看项目需要满足多少人的访问量,并发量到多少.不是说小公司就不需要分布式.大数据这些,考虑长期的问题. 将一些固定不常变化的值,设置为常量:采用缓存机制,减少对于数据库的访问(连接池):服务器的优化(队列): 二.数据库本身 1.表结构的设计 表的设计来源于需求,同时表的建立也会影响需求的实现,一

数据库优化概览

数据库优化,一直是很让人头疼的事,尤其对于当前互联网发展到了一定的时期,数据量达到了一定的数量级,处理数据比较慢,这方面的知识就显得尤为重要了.这里就大概来说下数据库优化的相关知识. 先说下当前数据库大部分都还是以关系型数据库为主流,但是现在NoSQL也慢慢变得越来越重要了,毕竟现在是大数据时代,但是这里主要是讲关系型数据库. 数据优化是①找出系统瓶颈:②合理结构设计和参数调整,提高响应速度:③节省系统资源.其原则是①减少系统瓶颈:②减少资源占用:③增加系统反应速度.一般包括优化查询和优化数据库

规范化-数据库设计原则

关系数据库设计的核心问题是关系模型的设计.本文将结合具体的实例,介绍数据库设计规范化的流程. 摘要 关系型数据库是当前广泛应用的数据库类型,关系数据库设计是对数据进行组织化和结构化的过程,核心问题是关系模型的设计.对于数据库规模较小的情况,我们可以比较轻松的处理数据库中的表结构.然而,随着项目规模的不断增长,相应的数据库也变得更加复杂,关系模型表结构更为庞杂,这时我们往往会发现我们写出来的SQL语句的是很笨拙并且效率低下的.更糟糕的是,由于表结构定义的不合理,会导致在更新数据时造成数据的不完整.

中国移动MySQL数据库优化最佳实践

原创 2016-08-12 章颖 DBAplus社群 本文根据DBAplus社群第69期线上分享整理而成,文末还有书送哦~ 讲师介绍章颖 数据研发工程师 现任中国移动杭州研发中心数据研发工程师,擅长MySQL故障诊断,性能调优,MySQL高可用技术,曾任中国电信综合平台开发运营中心DBA 开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则需要从数据

&#8203;Mysql数据库优化总结

Mysql数据库优化总结 -----杜 说明:本文的环境为CENTOS 5.5 64 Bit /Mysql 5.1.50 简介:使用Mysql有一段时间了,期间做了不少关于Mysql优化.设计.维护的工作,这两天有时间做一下简单的总结,方便自己回忆,同时也希望能对大家有点帮助. I            硬件配置优化 CPU选择:多核的CPU,主频高的CPU 内存:更大的内存 磁盘选择:更快的转速.RAID.阵列卡, 网络环境选择:尽量部署在局域网.SCI.光缆.千兆网.双网线提供冗余.0.0.

数据库查询优化原则

数据库查询优化原则 首先应注意的原则 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句