如何优化数据库

建表时可以得出以下优化建议

1、数据类型尽量用数字型,数字型比字符型的快

2、选择正确的表引擎

MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。 
       InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

3、选择合适的数据类型。

如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。

4、尽量给字段加上NOT NULL

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

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

查询的时候得出的优化建议:

7、尽量不要在数据库中做运算

8、使用预处理语句。例如使用PDO来操作mysql

在性能方面,当一个相同的查询被使用多次的时候,这会为你带来可观的性能优势。你可以给这些Prepared Statements(预处理语句)定义一些参数,而MySQL只会解析一次。

9、不要在生产环境程序中使用select * from 的形式查询数据。只查询需要使用的列

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

11、所有的SQL关键字用大写,避免SQL语句重复编译造成系统资源的浪费

12、开启慢查询日志,定期用explain或desc优化慢查询中的SQL语句

13、最先出现的条件,一定是过滤和排除掉更多结果的条件,第二出现的次

之。

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

15、尽量避免在where子句中对字段进行null值判断。这会进行全表扫描

Select id,name from user where name is null;

16、尽量避免在where子句中对字段进行表达式操作。这会导致引擎放弃使用索引而进行全表扫描

SELECT id,name FROM user where age/12;

17、使用连接(join)代替子查询select * from customInfo where customId in (
select customId from saleInfo  )

18、对于OR子句,如果要利用索引,则OR之间的每个条件列都必须用到索引,如果没有索引,则应该考虑增加索引。

时间: 2024-08-09 16:57:29

如何优化数据库的相关文章

性能优化-数据库

数据库优化涉及的内容比较多,并且它是一个长期的过程! 同样本篇和其他一样,不讲类似数据库三范式这样的东西,因为我认为这不算优化的范围!直接进入正文吧. 索引 有人说过,懂得如何使用索引,就懂得如何优化数据库了.当然,这肯定有一些夸张,但是从侧面反映了索引的重要性. 索引有多种形式,首先是主键索引,对于主键索引,是普通索引外加唯一约束.建议尽量不要使用.因为要确保唯一性,在插入时,会锁住全表,进行唯一检查. 其次是普通索引,在主要的列上创建索引,不要建在数据量大的列上,因为大数据的列,索引本身的数

Oracle DBA优化数据库性能心得

如今的优化己经向优化等待(waits)转型了,实际中性能优化最根本的出现点也都集中在IO,这是影响性能最主要的方面,由系统中的等待去发现Oracle库中的不足.操作系统某些资源利用的不合理是一个比较好的办法. 一.通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲这也可能不是一个正常的状态,因为cpu可能正等待IO的完成.除此之外我们还应观注那些占用系统资源(cpu.内存)的进程. 1.如何检查操作系统是否存

DB2日常维护——REORG TABLE命令优化数据库性能

[转]DB2日常维护——REORG TABLE命令优化数据库性能 一个完整的日常维护规范可以帮助 DBA 理顺每天需要的操作,以便更好的监控和维护数据库,保证数据库的正常.安全.高效运行,防止一些错误重复发生. 由于DB2使用CBO作为数据库的优化器,数据库对象的状态信息对数据库使用合理的 ACCESS PLAN至关重要.DB2 优化器使用目录统计信息来确定任何给定查询的最佳访问方案.如果有关表或索引的统计信息已过时或者不完整,则会导致优化器选择不是最佳的方案,并且会降低 执行查询的速度.当数据

如何优化数据库查询

宏观: 1.缓存.在持久层或持久层之上做缓存. 从数据库中查询出来的数据先放入缓存中,下次查询时,先访问缓存,如果未命中则查询数据库. 2.表分区和拆分.无论是业务逻辑上的拆分还是无业务含义的分区. 3.提高磁盘速度.这包括RAID和其他磁盘文件分段的处理.主要的思想是提高磁盘的并发度(多个物理磁盘存放同一个文件). 微观: 表设计方面: 1.字段冗余.减少跨库查询和大表连接操作. 2.数据库表的大字段剥离.保证单条记录的数据量很小. 3.恰当地使用索引, 甚至是多级索引. 查询优化方面: 2.

SqlServer 数据库引擎优化顾问优化数据库

现在一直在做的项目,数据量相对也不小,开始的时候没有觉得,因为是刚开始,数据量还很小,在程序使用过程中速度还挺快,但是随着数据量的不停的增长,发现程序越来越慢,甚至出现了超时的问题,因此要对程序和数据库进行优化,前期项目比较紧,没有针对大数据量业务进行分析设计,所以索引等相关优化没有做到位,通过后期的大数据量导致的错误使用了下面的方法. 这里简单的讲一下:如何使用数据库引擎优化顾问优化数据库 简单的优化一下数据库. 一.启动 microsoft sql server management stu

19.Mysql优化数据库对象

19.优化数据库对象19.1 优化表的数据类型应用设计时需要考虑字段的类型和长度,并留有一定长度冗余.procedure analyse()函数可以对表中列的数据类型提出优化建议.procedure analyse()函数用法:select * from 表名 procedure analyse(); -- 对所有列提出优化建议select * from 表名 procedure analyse(16,256); -- 不对包含16至256取值的枚举列提出建议分析的结果是针对每个列,输出该列的最

mysql优化-数据库优化、SQL优化

我有一张表w1000,里面有1000万条数据,这张表结构如下:CREATE TABLE `w1000` ( `id` varchar(36) NOT NULL, `name` varchar(10) DEFAULT NULL, `age` int(3) DEFAULT NULL, `money` double(8,2) DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_date` datetime(3) DEFAULT NULL

利用虚拟索引(Virtual Index)优化数据库的案例分析

当我们在对生产库做优化的时候,主要就是对SQL语句的优化,包括语句的等价改写等,但其中很大一部分情况,又与索引有关.如果能合理利用合适的索引,可以使原本走全表扫描产生的逻辑读大大降低,提高数据库的性能.由于Oracle数据库中的索引本身就要占用磁盘空间,维护索引需要一定的开销,如何才能知道创建某个索引,会给数据带来性能的提升,而又不至于判断失误,创建了一个不恰当的索引,最后又不得不删除呢?这种情况下,我们可以利用Oralce提供的虚拟索引,即nosegment索引,它并不占用磁盘资源,只是在数据

合理优化数据库表结构提高项目执行效率[数据库设计]

数据库表设计优化: 有时为了提高数据库效率,可适当考虑反三范式,适当添加冗余字段,减少多表去关联查询. 使用索引: 2.1 数据库表设计时要合理的去使用普通索引.主键索引.唯一索引.全文索引以及复合(组合)索引. 2.2 何时创建索引: (1) 较频繁的作为查询条件的字段; (2) 唯一性太差的字段(如性别/状态字段等),即使我们频繁作为查询的条件,匀不适合创建索引; (3) 数据更新非常频繁的字段(如统计平台当前的在线人数字段/商品的销售数量字段等)是不适合创建索引. 2.3 具体索引的使用请