对mysql优化时一个综合性的技术,只要包括

 a 表的设计合理化(3NF)

 b 添加适当索引(index)[四种:普通索引 全文索引 主键索引 唯一索引(unique) 全文索引

 c 分表技术(水平分割 垂直分割)

 d 读写[写:update/delete/add]分离

 e 存储过程[模块化编程,可以提高速度]

 f 对mysql配置优化[配置并发数my.ini,调整缓存大小]

 g mysql 服务器硬件升级

 h 定时的去清除不需要的数据,定时进行碎片整理(myisam)

什么样的表才是符合3NF(范式)

表的范式,是首先符合1NF,才能满足2NF,进一步满足3NF

1NF:即表的列具有原子性,不可在分解,即列的信息不能分解,只要数据库是关系型数据,就自动满足1NF.

2NF:表中的记录是唯一的,就满足2NF,通常我们设计一个主键来实现.

3NF:即表中不要有冗余数据,也就是说,表的信息如果能够被推导出来,就不应该单独的设计一个字段来存放.

SQL语句优化

    sql语句本身的优化

    问题是:如何从一个大项目,迅速的定位执行速度慢的语句(定位慢查询)

          1 首先我们了解mysql数据库的一些运行状态如何查询(比如想知道当前mysql运行的时间/一共执行了多少次 select/update/delete.../)

            show status;

            常用的:

            show status like 'uptime'

            show status like 'com_select'   show status like 'com_insert'/'com_delete'

            show [session|global] status like ... 如果你不写[session|global] 默认是session会话,指取出当前窗口的执行,如果想看所有(从mysql启动到现在,则应该用global)

             show status like 'connection'; //显示慢查询次数

             show status like 'slow_queries';

          2 如何去定位慢查询

                   构建一个大表(400万)`存储过程的构建

                   默认情况下,mysql认为10秒才是一个慢查询

              修改mysql的慢查询

                   show variables like 'long_query_time';

                   set long_query_time=1;