Mysql性能优化 索引优化的一般步骤和操作
2017-08-20 22:55
211 查看
索引是数据库优化中最常见最重要的手段,通过索引可以帮助用户解决大多数的SQL性能问题。
索引是什么
索引是一种实现了B-tree或者B+tree的数据结构,这种数据结构上有专门的查找算法
索引的存储分类
MYSQL有两个存储引擎:
MYISAM存储引擎:表数据和索引自动分开存储,各种是一个独立的存储文件,表的文件有:.MYD数据文件 .MYI所有文件.frm结构文件
INNODB存储引擎:表的数据和索引都是存储在同一个共享表空间里面,但是有多个文件组成,表的文件有:IBDATA1.IBD 数据库文件
INNODB存储引擎的表空间有两种形式:
共享表空间:默认形式,索引和数据文件是共享表空间
独立表空间形式:索引和表空间分离,多个文件之间可以方便的完成跨数据库甚至跨硬件的数据读写,相对来说比较灵活,版本5.5以上mysql默认存储引擎都是innodb,这样就可以做数据分布式支撑(TODO)
mysql目前不支持函数索引,但是能对列的前面一部分进行索引,这样就减少索引的存储空间,可以大大缩小索引文件的大小
适合添加索引的场景
出现在where、orderby、 groupby、 having条件句中的字段,并且他们是频繁进行查询的信息
查找slowsql 慢日志查询找到slowsql
slwo_query_log off ,慢查询日志未开启
开启慢查询日志:
win:my.ini
linux /etc/my.cnf
执行计划分析sql
没有索引是全表扫描,效率非常低
type类型的性能高低System、const、eq_ref、ref、ref_or_null
使用索引
查询索引是否插入成功
MUL是普通索引//TODO
-导致索引失效
使用组合索引:如果符合索引为列1,列2,列3 只使用列2列3则使用不到索引 必须带列1
like查询
%放在首位,索引不生效
查询为空的时候 null 和 is null ,会使用索引
列是字符串,但是查询条件是数字,也会导致索引失效
where 和 or组合:or左右两遍都是索引 索引才会生效,否则失效
INSERT INTO students(NAME) VALUES('admin0'),('admin1'),('admin2'),('admin3'),(('admin4')),('admin5'),('admin6'),('admin7'),('admin8')
索引是什么
索引是一种实现了B-tree或者B+tree的数据结构,这种数据结构上有专门的查找算法
索引的存储分类
MYSQL有两个存储引擎:
MYISAM存储引擎:表数据和索引自动分开存储,各种是一个独立的存储文件,表的文件有:.MYD数据文件 .MYI所有文件.frm结构文件
INNODB存储引擎:表的数据和索引都是存储在同一个共享表空间里面,但是有多个文件组成,表的文件有:IBDATA1.IBD 数据库文件
INNODB存储引擎的表空间有两种形式:
共享表空间:默认形式,索引和数据文件是共享表空间
独立表空间形式:索引和表空间分离,多个文件之间可以方便的完成跨数据库甚至跨硬件的数据读写,相对来说比较灵活,版本5.5以上mysql默认存储引擎都是innodb,这样就可以做数据分布式支撑(TODO)
mysql目前不支持函数索引,但是能对列的前面一部分进行索引,这样就减少索引的存储空间,可以大大缩小索引文件的大小
适合添加索引的场景
出现在where、orderby、 groupby、 having条件句中的字段,并且他们是频繁进行查询的信息
查找slowsql 慢日志查询找到slowsql
show VARIABLES like '%quer%'
slwo_query_log off ,慢查询日志未开启
开启慢查询日志:
win:my.ini
linux /etc/my.cnf
[mysqlid]元素 slwo_quer_log=TRUE slow_quer_log_file="路径" long_query_log=3
执行计划分析sql
DESC SELECT * from students where id = 1;
DESC SELECT * from students where `name` = 'admin1';
没有索引是全表扫描,效率非常低
type类型的性能高低System、const、eq_ref、ref、ref_or_null
使用索引
ALTER TABLE students ADD INDEX in_name(name)
查询索引是否插入成功
MUL是普通索引//TODO
DESC SELECT * from students where `name` = 'admin1';
-导致索引失效
使用组合索引:如果符合索引为列1,列2,列3 只使用列2列3则使用不到索引 必须带列1
like查询
%放在首位,索引不生效
查询为空的时候 null 和 is null ,会使用索引
列是字符串,但是查询条件是数字,也会导致索引失效
where 和 or组合:or左右两遍都是索引 索引才会生效,否则失效
相关文章推荐
- MySQL 数据库性能优化之索引优化
- mysql索引结构原理、性能分析与优化
- mysql性能优化-慢查询分析、优化索引和配置
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL索引使用方法和性能优化原文链接
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL性能优化(三)-- 索引
- 由浅入深探究mysql索引结构原理、性能分析与优化
- mysql性能优化-慢查询分析、优化索引和配置
- MySQL索引使用方法和性能优化
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】
- 【Mysql】mysql性能优化-慢查询分析、优化索引和配置
- 【转】由浅入深探究mysql索引结构原理、性能分析与优化
- MySQL索引使用方法和性能优化 推荐
- MySQL性能优化之索引详解
- mysql性能优化-索引与优化
- MySQL 5.5版本对普通索引增删性能的优化
- mysql性能优化-慢查询分析、优化索引和配置
- (一) MySQL 性能优化 基础之索引概念