Mysql优化一

Mysql优化

1、存储引擎

1.查看全部引擎

SHOW ENGINES;

2.查看默认存储引擎

show VARIABLES LIKE '%STORAGE_engine%';

3.MyISAM和InnoDB

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

2、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

3、索引

1.定义

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

其目的在于提升查询效率,能够类比于字典,能够简单理解为排好序的快速查找数据结构算法

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

一般说的索引若是没有特别指明,说的都是B树(多路搜索树,并不必定是二叉的)结构组织的索引。其中汇集索引、次要索引、覆盖索引、复合索引、前缀索引、惟一索引默认都是使用B+树索引,统称索引。固然,除了B+树这种类型的索引以外,还有哈希索引等数据库

索引会影响到查找和排序缓存

通常来讲索引也很大,不可能所有存储在内存中,所以索引每每以索引文件的方式存储在磁盘上。mysql优化

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. 数据重复且分布平均的表字段,所以应该只为最常常查询和最常常排序的数据创建索引

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

相关文章
相关标签/搜索