你的位置:首页 > 数据库

[数据库]数据库优化方法


转载自百度文库(下载下来后关闭原网页,找不到作者和出处了。--!)。

  • 适当增加磁盘缓冲区,减少IO读写次数。但不是越大越好,太大会导致虚拟内存分配
  • 尽量使事务处理达到最短,如果太长会造成数据库阻塞
  • 尽可能减少与数据库的交互次数,如果有循环访问的情况,最好采用一次读取
  • 不要设计过多的变长类型的数据
  • 不要使用SELECT *方式进行查询,列出需要具体查询的列名称,这样可以减少数据库解析时间、并且减少数据通讯量,提高SQL的可读性
  • 统计表行数时,使用count(1)比count(*)更高效
  • IN执行时,先执行子查询,适合于外表大而内表小的情况;EXISTS是通过关联表查询,且外层表先被访问,适合于外表小而内表大的情况
  • Not in执行时,会遍历整个表单,而not exists执行时,只要出现第一个数据则立即返回
  • 非必要时,不要使用DISTINCT和ORDER BY
  • 尽量避免子查询,如果不可避免,则在子查询中过滤掉尽可能多的行
  • 插入大的二进制到数据库时,应使用存储过程,不要使用insert,因为它会先将二进制转化为字符串,然后又将字符串转化为二进制
  • 使用between比in快
  • 对列的操作会导致表扫描,包括数据库函数、计算表达式等,查询时应尽可能将操作移至等号右边
  • Null不能当做索引,任何包含null的列都不会被当做索引,因此在where字句中使用is null或is not null时,优化器将不会使用索引
  • Where条件顺序尽量把索引字段放在前面,复合索引字段顺序与where条件顺序一致
  • 外键关联的列应该建立索引
  • Union all比union执行的效率高
  • Order by字句中尽量不要使用非索引项或计算表达式
  • SQL语句中不等于、包含运算的、存在模糊查询、包含有空值的、两端数据类型不同的,以上情况,查询时不能使用索引
  • 当数据库主机资源有空闲时,我们可以采用客户端多进程并行访问的方法来提高性能
  • 为表添加索引字段
  • 必要的时候,去正规化,允许部分数据冗余,避免JOIN操作,提高查询效率
  • 系统架构设计时,表散列,把海量数据散列到几个不同的表中;快慢表,快表只留最新数据,慢表是历史存档;集群,主服务器Read&Write,从服务器只读,或者多台服务器,各个机器之间互为Master