SQL、索引、B+树、分库分表

1.SQL优化

        SQL定位执行效率慢的sql语句

        1.命令:show Status  like ,通过这条命令可以知道数据库是以查询为主还是更新为主,

        那个多就优化那个操作

        2.explain+sql语句查询sql执行过程,得到这些信息:

                a:哪些步骤花费的成本比较高

                b:哪些步骤产生的数据量多,数据量的多少用线条的粗细表示,很直观

                c:sql语句是否走索引

        3.show profile 分析SQL语句,可以查看所有sql语句的执行效率(执行时间),前提是这个命令需要被打开

        4.慢查询日志(常用的工具)

               慢查询日志记录了所有执行时间错过参数long_query_time的sql语句的日志,参数默认为10秒(可以通过配置文件设置),日志保存在/var/lib/mysql/目录下,有个slow_quey.log文件。

2.explain功能

        表的读取顺序

        数据读取操作的操作类型

        哪些索引可以使用

        哪些索引被实际使用

        表之间的引用

        每张表有多少行被优化器查询

3.sql语句调优

        1.根据业务场景建立复合索引只查询所需要的业务字段,这些字段被索引覆盖将极大的提升查询效率

        2.多表连接的字段上需要建立索引,极大的提高表连接的效率

        3.where条件字段上需要建立索引,但where条件上不要使用运算函数,避免索引失效

        4.排序字段上,因为排序效率低,添加索引能提高效率

        5.优化insert语句:批量插入数据比单个插入数据效率高

        6.优化order by语句,在使用 order by 语句时不要使用select * ,select后面要查有索引的列,如果一条语句对多个列进行排序,在业务允许的情况下,同时排序或降序

        7.优化group by语句:在我们对某一个字段进行分组的时候,mysql默认是帮我们排序的,但是排序又不是我们业务所必须的,额外的排序会降低效率,所以可以禁止排序,order by null。

        8.尽量避免子查询,可以将子查询优化为join多表连接查询

        9.合理的数据库设计

             

4.合理的数据库设计

        根据数据库三范式进行表结构的设计。设计表结构时,就需要考虑如何设计更有效的查询,

遵循数据库三范式。

        第一范式:数据表中的每个字段都是不可拆分的最小单元,确保每一列的原子性

        第二范式:满足第一范式后,表中每一列必须有唯一性,都必须依赖主键

        第三范式:满足第二范式后,表中每一列只与主键直接相关,而不是间接相关,字段没有冗余。

        没有最好的设计,只有最合适的设计,不要过分注重理论。三范式作为一个基本依据

有时候可以根据场景合理的反规范化

                

        

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值