MySQL 优化一(扫盲加索引介绍)(高级篇)

前边我们了解了MyIsam和InooDB两种引擎的锁 现在先说说两种引擎的区别适合干什么?

MyIsam引擎适合做的:
(它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表)
其他资料结解释:
1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。
2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。
InooDB引擎适合做的:
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
其他资料的解释:
1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。
2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。
3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4.外键约束。MySQL支持外键的存储引擎只有InnoDB。
5.支持自动增加列AUTO_INCREMENT属性

mysql性能下降的原因?

根本:sql执行慢要么就是cpu计算复杂 要么就是频繁的IO开销
1.首先进入linux打top 看看是否是内存不够 cpu占满 磁盘满了 或者其他硬件方面的原因!这些排除了再去找sql的原因!
2.假设真的排除了上边的原因 那么我们再去找sql的原因
一般性能下降sql慢的原因:
执行时间长 或者 等待时间长
导致执行时间或者查询时间长的原因是:
a.查询语句写的烂(解释:各种子查询 各种join 函数等导致索引失效或者根本没建立索引 就会跑的贼慢)
b.索引失效(
解释:建立了但是没用上
索引分为单值索引和复合索引:
单值索引:
假设表当中有100万条数据 我们从中查询一条 我们可以为name字段创建索引 创建了索引也就是 做了标记 查询会非常的快;
select * from users where name = ‘’;
这种情况下我们就可以为name字段创建索引:
//index表示索引
//idx_users_name索引名称 通常这么定义: idx前缀表示索引users哪张表name这个表的哪个字 段 当然我们也可以命名成别的名称也行 但是这样更加规范
//on users(name) 表示是为表当中的哪个字段创建索引
create index idx_users_name on users(name);//关键词:创建索引
复合索引:
假设我们现在要按照两个字段进行搜索
select * from users where name=’’ and password=’’;
经常会有组合在一起的字段需要进行查询 那么此刻我们就可以创建复合索引
create index idx_users_namepassword on users(name,password);//关键词:创建索引
这样就创建了复合索引 当name和password同时查的时候就会用到我们创建好的复合索引

c.关联查询太多join(
解释:设计缺陷或者不得已的需求
太多表的join关联和嵌套的子查询都会造成查询慢的情况发生!
)
d.服务器调优以及各个参数配置(缓冲 线程数等)

sql的执行顺序:sql的执行顺序:

用户手写的sql顺序:

sql自己内部的执行顺序:

索引:

什么是索引?
mysql官方定义索引:索引是帮助mysql高效获取数据的数据结构
本质:索引是一种数据结构
索引的目的:在于提高查询效率 可以类比字典
排好序的快速查找数据结构就是索引!
索引两大功能:
查找和排序 也就是说会影响到where后边的条件查找是否能用上索引进行快速查找也会影响到order by 排序
索引的优势和劣势:

索引得是删了建 建了删的一个过程 我们得根据用户的搜索习惯来不听的更新索引!并不是一层不变的
索引的分类和创建:
一般建议创建的是复合索引 当然也分情况 如果一个字段被搜索的次数很多频率很高那么我们也可以为其创建单值索引;
(创建了复合索引 但是在查找的时候我们只用到了其中的一个索引 也是可以的 也是有效的哦!)
一张表索引的个数最多最好不要超过5个 这是中规中矩的做法!


什么情况下适合建立索引什么时候不适合建立索引:

注意:
表当中记录很少几千几万的就不要建立索引了 因为mysql数据库这点数据量还是吼得住的!
如果一个字段的重复值非常多 也不要建立索引 因为建立了也没用!

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!