Sql优化
【1】核心作用:提高查询效率
【2】四大分类:Primary,index,uniquer,fulltext
-主键和外键自带索引,且往往只能有一个
-唯一索引可有多个
-常规索引:快速定位特定数据!——不宜添加太多的常规索引,会影响数据的写效率。【一般在字段量的1/4】
-全文索引:针对例如:like %xxx% [vachr,char,等大数据字符串] \类似分词【搜索引擎中】 只有MyISAM能用, 【5.6之前】;5.6后支持InnerDB.——默认对英文生效,中文通常是无效的。【+支持安装插件】
【3】索引准则
-Mysql等数据库的索引本质也是一张表
-MyISAM的索引文件仅仅保存数据记录的地址——非聚集索引,索引与数据是分开的,每一条数据对应一个索引 【主索引唯一,辅助索引运行不唯一】
-InnerDB:聚集索引,数据与索引为一体
-InnoDB采用自增字段做表的主键——保证有序——即:主键索引查询高效,辅助索引查询2次,只先通过辅助找到主键,然后通过主键定位
【4】B-tree:检索
-
【5】执行计划
-研究查询效率。依靠数据本身的sql优化器,建立依次查询的计划或步骤。——该过程不可控,可以通过执行计划观察,根据执行计划调整查询的方式和方法,使得查询效率尽可能最优
-查询效率影响因素:数据量,数据的倾斜。
-Explaiin + sql语句 :通过输出结果来优化。
-id:相同,则自上而下;不同,则由大到小
-select_type: 简单查询,不建立执行计划;primary,subquery,union,同理查询顺序同id
-type访问类型,最重要,关键,有价值的结果,优化查询结果的指标 +【rows , filtered】次之
-直接命中主键,效率最高【InnoDB中,推荐+主键】
-sql优化器——对数据库管理系统的国产化,底层的引擎!--只能逆向工程,反推大概是什么样子!&&&正面直接建立模型的基础研究的投入!
-索引最好是等值判断;对于 经常做非等值判断的,不要去建索引!
-index:全表扫描-主键;All:非主键的全表扫描
-Type:参考指标;但是:type不是唯一决定因素!+【rows+filrtered】+【执行时间】的综合效率
-rows越小越好,filtered越大越好
-
-补充:union 去重 ;union all 查询所有数据 ??——具体应用实力
数据库优化策略:背诵记忆
【1】索引、数q据本身、日常维护、使用方式:主键索引,未必慢于其他辅助索引
【2】影响效率的因素:
-全表扫描:索引失效是会引起全表扫描的一个关键因素。【尽可能让索引生效!】
-
-
【3】索引失效情况
-
-索引从左往右;非索引从右往左
-
【4】where语句优化
-
表的设计
【1】大表:尽可能少关联
【2】小表:用户登录表,用户明细表。
【3】尽可能避免子查询和临时试图;建议使用:缓存!尤其是对数据结构有很大影响。
【4】外键建索引,但是不要加约束
【5】
创建和使用索引
Mysql事务管理和锁