Mysql优化一

一、存储引擎

1.查看所有引擎

SHOW ENGINES;

Mysql优化一 Mysql 第1张

2.查看默认存储引擎

show VARIABLES LIKE '%STORAGE_engine%';

Mysql优化一 Mysql 第2张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

3.MyISAM和InnoDB

对比项 MyISAM InnoDB
主外键 不支持 支持
事务 不支持 支持
行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存的要求较高,而且内存的大小对其性能有决定性的影响
表空间
关注点 性能 事务
默认安装 YES YES

二、SQL执行加载顺序

From left_table
on join_condition
<join_type> join right_table
where where_condition
group by group_condition
having having_condition
select
distinct select_list
order by orderBy_condtion
limit limit_num

三、索引

1.定义

索引是帮助Mysql高效获取数据的数据结构。——>本质:数据结构。

其目的在于提高查询效率,可以类比于字典,可以简单理解为排好序的快速查找数据结构

数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。

通常说的索引如果没有特别指明,说的都是B树(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚集索引、次要索引、覆盖索引、复合索引、前缀索引、唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈希索引等

索引会影响到查找和排序

一般来说索引也很大,不可能全部存储在内存中,因此索引往往以索引文件的方式存储在磁盘上。

2.特点

优点:提高数据检索的效率,降低了数据库的IO成本。

​ 通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

缺点:实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引也是占用空间的。

​ 虽然其大大调高了查询速度,同时却会降低更新表的速度。因为更新表时不仅要保存数据,还要保存一下 索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。

​ 索引只是提高效率的一个因素,如果你的数据库拥有大量的表,就需要花时间研究建立最优秀的索引,或 优化查询。

3.分类

  • 单值索引

    一个索引只包含单个列,一个表可以有多个单值索引。

  • 唯一索引

    索引列的值必须唯一,但允许有空值

  • 复合索引

    一个索引包含了多个列

4.基本语法

创建:UNIQUE是唯一索引, columnname只有一个是单值索引,有多个为复合索引

CREATE [UNIQUE] INDEX indexname on tablename(columnname1, columnname2...)
or
ALERT tablename add [UNIQUE] INDEX [indexname] on (columnname1, columnname2...)

删除:

DROP INDEX [indexname] on tablename

查看

SHOW INDEX FROM tablename

5.适合建立索引的情况

  1. 主键自动建立唯一索引
  2. 频繁作为查询条件的字段应该创建索引
  3. 查询中与其他表关联的字段,外键关系建立索引
  4. 查询中排序的字段,排序字段若通过索引去访问,将大大提高排序速度
  5. 单键/组合索引的选择问题(高并发适合创建组合索引)
  6. 查询中统计或分组的字段

6.不适合创建索引的情况

  1. 频繁更新的字段

  2. where条件里用不到的字段

  3. 表记录太少

  4. 数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据建立索引

    索引的选择性=不同的数目/总数目

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄