数据库优化方法

常见的数据库优化方法:索引(数据库),缓存,分表,分库,sql优化。

索引:创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略。95% 的数据库能问题都可以采用索引技术得到解决。索引有助于提高检索性能,但过多或不当的索引也会导致系统低效。因为用户在表中每加进一个索引,数据库就要做更多的工作。过多的索引甚至会导致索引碎片。

缓存:hibernate,spring3有缓存模块

分表:针对每个时间周期产生大量的数据,可以考虑采用一定的策略将数据存到多个数据表中。

分库:就是将系统按照模块相关的特征分布到不同的数据中,以提高系统整体负载能力。

sql优化:

1.in 和 not in 也要慎用,因为IN会使系统无法使用索引,而只能直接搜索表中的数据。如:

select id from t where num in(1,2,3)对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

2.当判断真假是,如果带and 或者 or :

(当存在 “where 条件1 and 条件2” 时,数据库先执行右边的语句)

and尽量把假的放到右边(一个为假就为假)  Or尽量把为真的放到右边(一个为真就为真)

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

SELECT * FROM T1 WHERE F1/2=100

应改为:

SELECT * FROM T1 WHERE F1=100*2

SELECT * FROM RECORD WHERE SUBSTRING(CARD_NO,1,4)=’5378’

应改为:

SELECT * FROM RECORD WHERE CARD_NO LIKE ‘5378%’

SELECT member_number, first_name, last_name FROM members

WHERE DATEDIFF(yy,datofbirth,GETDATE()) > 21

应改为:

SELECT member_number, first_name, last_name FROM members

WHERE dateofbirth < DATEADD(yy,-21,GETDATE())

即:任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时 要尽可能将操作移至等号右边。

时间: 2025-01-18 07:38:04

数据库优化方法的相关文章

转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

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

数据库优化方法整理

数据库优化的目标无非是避免磁盘I/O瓶颈.减少CPU利用率和减少资源竞争. 在基于表驱动的信息管理系统(MIS)中,基本表的设计规范是第三范式(3NF). 第三范式的基本特征是非主键属性只依赖于主键属性. 基于第三范式的数据库表设计具有很多优点: 一是消除了冗余数据,节省了磁盘存储空间: 二是有良好的数据完整性限制,即基于主外键的参照完整限制和基于主键的实体完整性限制,这使得数据容易维护, 也容易移植和更新: 三是数据的可逆性好,在做连接(Join)查询或者合并表时不遗漏.也不重复: 四是因消除

30多条mysql数据库优化方法,千万级数据库记录查询轻松解决【转】

转自:http://www.ihref.com/read-16422.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, Sql 代码 : select id from t where num is null; 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询: Sql 代码 : s

大数据量高并发访问的数据库优化方法

一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. 在一个系统分析.设计阶段,因为数据量较小,负荷较低.我们往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低,这时再来考虑提高系统性能则要花费更多的人力物力,而整个系统也不可避免的形成了一个打补丁工程. 所以在考虑整个系统的流程的时候,我们必须

大数据量高并发訪问的数据库优化方法

????假设不能设计一个合理的数据库模型.不仅会添加client和server段程序的编程和维护的难度,并且将会影响系统实际运行的性能.所以,在一个系统開始实施之前,完备的数据库模型的设计是必须的. ????在一个系统分析.设计阶段.由于数据量较小.负荷较低.我们往往仅仅注意到功能的实现.而非常难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低.这时再来考虑提高系统性能则要花费很多其它的人力物力,而整个系统也不可避免的形成了一个打补丁project. ????所以在考

索引——数据库优化方法(一)

「数据库」和「数据库索引」这两个东西是在服务器端开发领域应用最为广泛的两个概念,熟练使用数据库和数据库索引是开发人员在行业内生存的必备技能 使用索引很简单,只要能写创建表的语句,就肯定能写创建索引的语句,要知道这个世界上是不存在不会创建表的服务器端程序员的.然而, 会使用索引是一回事, 而深入理解索引原理又能恰到好处使用索引又是另一回事,这完全是两个天差地别的境界(我自己也还没有达到这层境界).很大一部份程序员对索引的了解仅限于到“加索引能使查询变快”这个概念为止. 为什么要给表加上主键? 为什

常用的MySQL数据库优化方法

优化索引.SQL语句.分析慢查询: 设计表的时候严格根据数据库的设计范式来设计数据库: 你用memcache缓存,把经常访问到的数据而且不需要经常变化的数据放在memcache缓存中,能节约磁盘IO: 优化硬件:采用SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)等: 采用MySQL内部自带的表分区技术,把数据分层不同的文件,能够提高磁盘的读取效率: 垂直分表:把一些不经常读的数据放在一张表里,节约磁盘I/O: 主从分离读写:采用主从复制把数据库的读操作和写入操作分离开来: 分库分

数据库的优化方法

常见的数据库优化方法:索引(数据库),缓存,分表,分库,sql优化. 索引:创建索引一般有以下两个目的:维护被索引列的唯一性和提供快速访问表中数据的策略.95% 的数据库性能问题都可以采用索引技术得到解决.索引有助于提高检索性能,但过多或不当的索引也会导致系统低 效.因为用户在表中每加进一个索引,数据库就要做更多的工作.过多的索引甚至会导致索引碎片. 缓存:hibernate,spring3有缓存模块 分表:针对每个时间周期产生大量的数据,可以考虑采用一定的策略将数据存到多个数据表中. 分库:就

记一次不好不坏的数据库优化

最近项目当中有一项业务,需要循环操作上百张表,开始执行到结果返回耗时一分到一分半钟. 偶然将数据库同步到另一台机器上,连接后发现执行时间不到十秒钟,十分疑惑.排除过网络以及机器配置原因,仍然不明白之前的数据库与同步过来的数据库之前有什么差异. 通过StopWatch监测代码的执行情况,并使用log4net将结果输出到文件中.经过记录分析后发现,部分表的查询耗时较长,原因是表中数据量过万,一时之间也没有太好的办法. 通过搜索数据库优化方法,得到一些简单建议,中心思想就是避免全表扫描.比如对分组或者