sql优化的基本方法:

         

   sql调优总结

       1.表的设计满足3NF:

              目前设计的最高级别是6NF,含义百度。

              1NF:表的属性(列)具有原子性,表的列不能再分割(列本身的含义如地址不能分为地和址)。

                         不能有重复列。

                         说明:只要是关系型数据库天然满足1NF

                         常见的数据库:关系型(mysql,oracle,sql server,informix(银行),db2(海量表),postgres)

                                                  非关系型(nosql,Redis,MongoDB)

       

1-------------------------------------------------------------------------------------------------------------------

             2NF:表中不能有完全重复的一条记录,一般情况下通过设置主键来限定,是自增的。

             3NF:如果列的内容可以推导出来就不能(显示推导和隐式推导就不要单独测存放)单独用一列存放。

              sql调优总结

             sql调优总结

            反3NF:在通常的情况下表的设计要遵守3NF的原则,但是也有例外,反而会提高查询效率。

            案例:

           sql调优总结

            规则:1.一个相册有多个图片。

                       2.当用户点击图片,其浏览次数增加一次。

                       3.相册的浏览次数==其所有图片浏览次数的总和

                      分表:

                      sql调优总结

                       这样的设计是不合理的。

                       sql调优总结

                       打开相册时候查看总的浏览次数,这样是合理的。

                      评判:代码测试下就可以了。

2---------------------------------------------------------------------------------------------------------------

                     构建海量表(8000000)每条数据不一样的。这时我们要使用村塾过程。
                     对表进行查询:

                    创建部门表:

                    sql调优总结       

                    创建EMP雇员表

                  sql调优总结   

                     创建工资级别表

                    sql调优总结

                   数据:

                   sql调优总结

                    sql调优总结这个是代替分号的。

                    创建函数:

                    sql调优总结

                   sql调优总结测试这个函数。

                   返回随机的部门号:

                  sql调优总结

                  sql调优总结

                  报错的原因:1418,sql调优总结

                  sql调优总结

 

3---------------------------------------------------------------------------------------------------------------

                 海量表带来的问题:

                         看一个案例:

                        sql调优总结

                        要一秒钟。

                        1.使用索引优化

                                 给empno字段添加主键索引。

                                alter table emp add primary key (rmpno);

                               sql调优总结

                              打开my.ini数据库的数据默认是存放在这个路径的。

                             sql调优总结

                           上面的三个文件分别的结构数据索引(存储引擎是MyISAM)。

                            一般来讲索引占表的1/3

                          sql调优总结         索引文件72M文件300M

                          再次查询:

                          sql调优总结几乎没有时间。

                          问题解决了。但是缺点是占内存只在加索引的字段上有效。

                          定位慢查询(slow query):默认情况下,mysql是不会定位慢查询的,我们在测试的时候可以指定mysql记录慢查询。

                            启动的时候。

                                  mysql>bin/mysqld.exe --safe-mode --slow-query-log

                            关闭mysql-在启动里面关闭。

                             启动:cd到mysql的目录   bin/mysqld.exe --safe-mode --slow-query-log

                          sql调优总结

                            sql调优总结

                            日志记录慢查询。-----定义10秒是慢查询。

                            了解,如何查询mysql的参数。

                             mysql的变量和查询。

                             mysql>show variables

                             mysql>show variables like 'long_query_time'

                            sql调优总结

                             mysql>set long_query_time=1

                            sql调优总结

                            再查询一次(慢查询):

                            sql调优总结

                           sql调优总结 

                             发生时间,登陆的身份,ip地址,查询时间,锁的时间(时间长了就是等的时间查询的人多要解决数据量的吞吐量的问题),查询时间长是数据量大。

4----------------------------------------------------------------------------------------------------------------

                           如何分析一个sql的问题,explain。

                          基本用法:explain sql\G    

                          案例:

                         sql调优总结

                         id

                        查询类型

                        表

                        扫描方式

                        对当前sql有什么索引

                        语句实际用的什么索引

                        sql调优总结

                        分组尽量少用,分组的效率是非常低的。

                       sql调优总结

                      sql调优总结

                      优化:添加索引---分表

5-----------------------------------------------------------------------------------------------------------------

相关文章: