mysql数据库的优化

  1. 表的设计符合三范式

    1. 每一列属性都是不可分割的属性值,确保每一列的原子性

      学生编号 姓名 性别 联系方式
      20080901 张三 男 email:[email protected],phone:88886666
      20080902 李四 女 email:[email protected],phone:66668888

      以上的表就不符合,第一范式:联系方式字段可以再分,所以变更为正确的是:

      学生编号 姓名 性别 电子邮件 电话
      20080901 张三 男 [email protected] 88886666
      20080902 李四 女 [email protected] 66668888

    2. 每个非主属性是由整个主键函数决定的,而不能由主键的一部分来决定,是消除部分依赖。第二范式可以减少插入异常,删除异常和修改异常

      例如(学生选课表):
      学生 课程 教师 教师职称 教材 教室 上课时间
      李四 Spring 张老师 java讲师 《Spring深入浅出》 301 08:00
      张三 Struts 杨老师 java讲师 《Struts in Action》 302 13:30

      这里通过(学生,课程)可以确定教师、教师职称,教材,教室和上课时间,所以可以把(学生,课程)作为主键。但是,教材并不完全依赖于(学生,课程),只拿出课程就可以确定教材,因为一个课程,一定指定了某个教材。这就叫不完全依赖,或者部分依赖。出现这种情况,就不满足第二范式。

      修改后,选课表:
      学生 课程 教师 教师职称 教室 上课时间
      李四 Spring 张老师 java讲师 301 08:00
      张三 Struts 杨老师 java讲师 302 13:30

      课程表:
      课程 教材 
      Spring 《Spring深入浅出》 
      Struts 《Struts in Action》

    3. 数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系

      比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

      这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

      这样的表结构,我们应该拆开来,如下。

      (学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

  2. 添加适当的索引,索引对数据库查询速度影响很大,必须添加索引,例如:主键索引,唯一索引,普通索引,全文索引
  3. 添加合适的存储过程,触发器,事务等.

    触发器是一种特殊的存储过程,触发器主要是通过事件进行触发而被自动执行的,而存储过程可以通过存储过程名字而被直接调用,触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性,另外还有强化约束和级联运行的功能。

  4. 读写分离(主从数据库)
  5. 对sql语句的优化
    1. 用具体的字段代替*号,避免全表查询
    2. 避免where子句中使用!=或<>操作符,这样会进行全表扫描
    3. 避免where子句中对字段进行null值判断,
    4. 避免where子句中使用or来连接条件
    5. like模糊查询也会引起全表扫描,可以考虑全文检索
    6. in和not in也要避免使用,这样也会引起全表扫描,能用between就不用in了
    7. 可以用left join 代替子查询
  6. 分表分区:分表(把一张大表分词多张表),分区(把一张表里面的分配到不同的区域存储)
  7. 对mysql服务器的硬件升级
时间: 2024-10-12 16:27:30

mysql数据库的优化的相关文章

Mysql数据库性能优化(一)

参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面

架构设计:系统存储(8)——MySQL数据库性能优化(4)

================================ (接上文<架构设计:系统存储(7)--MySQL数据库性能优化(3)>) 4-3.InnoDB中的锁 虽然锁机制是InnoDB引擎中为了保证事务性而自然存在的,在索引.表结构.配置参数一定的前提下,InnoDB引擎加锁过程是一样的,所以理论上来说也就不存在"锁机制能够提升性能"这样的说法.但如果技术人员不理解InnoDB中的锁机制或者混乱.错误的索引定义和同样混乱的SQL写操作语句共同作用,那么导致死锁出现的

架构设计:系统存储(9)——MySQL数据库性能优化(5)

=================================== (接上文<架构设计:系统存储(9)--MySQL数据库性能优化(5)>) 4-3-3-3.避免死锁的建议 上一篇文章我们主要介绍了MySQL数据库中锁的基本原理.工作过程和产生死锁的原因.通过上一篇文章的介绍,可以确定我们需要业务系统中尽可能避免死锁的出现.这里为各位读者介绍一些在InnoDB引擎使用过程中减少死锁的建议. 正确使用读操作语句 经过之前文章介绍,我们知道一般的快照读是不会给数据表任何锁的.那么这些快照读操作

MySQL数据库的优化(下)MySQL数据库的高可用架构方案

MySQL数据库的优化(下)MySQL数据库的高可用架构方案 2011-03-09 08:53 抚琴煮酒 51CTO 字号:T | T 在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQL数据库的优化,今天我们继续跟随笔者学习MySQL优化的集群方案. AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿! [51CTO独家特稿]在上一篇MySQL数据库的优化中,我们跟随笔者学习了单机MySQL数据库的优化,今天我们继续跟随笔者学习MySQL优化的集群方案. M

mysql数据库的优化、恢复等操作

1.当你的自增id主键很大时,你想让id重新到1开始自增                    请输入: truncate table 表名; 2.当你的数据库损坏时,你别慌先试试这条命令是否可以帮助你      请输入: repair table 表1,表2- 3.当你的数据表中含有varchar.text等并进行多次删除添加等操作, 会产生好多碎片空间,这回浪费资源,需要进行数据表的优化, 则可以重获碎片空间                                          

MySQL 数据库性能优化之索引优化

这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL性能调优与架构设计>的书是否在藏,这样对他说:"请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做<MySQL性能调优与架构设计>".朋友会根据所属类别,前往

mysql数据库性能优化(包括SQL,表结构,索引,缓存)

优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段.降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定阶段之后

数据库调优教程(十三) MySQL数据库其他优化方法

六.           MySQL数据库其他优化方法 最后一章,谈谈前面没有涉及的一些优化方法. 1.      My.ini配置文件 这里只介绍两个最重要的,其他的不过多介绍. 1)    配置 最大连接数 默认为100,建议设为1000 2)   配置 缓存 在my.ini的[mysqld]节点开启查询缓存,配置如下 query_cache_size = 268435456 query_cache_type = 1 query_cache_limit = 1048576 2.      使

MySQL数据库性能优化之一

MySQL数据库性能优化需要考虑的几个方面: 1.sql语句及索引优化 2.数据库结构优化 3.系统配置优化 4.硬件优化

MySQL数据库性能优化专题

摘录: 书:<MySQL性能调优与架构设计> 一个系列: (按顺序排一下) MySQL 数据库性能优化之缓存参数优化 http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter MySQL 数据库性能优化之表结构优化 http://isky000.com/database/mysql-perfornamce-tuning-schema MySQL 数据库性能优化之索引优化 http://isky000.com/dat