您的位置:首页 > 数据库 > MySQL

Mysql性能优化 索引优化的一般步骤和操作

2017-08-20 22:55 211 查看
索引是数据库优化中最常见最重要的手段,通过索引可以帮助用户解决大多数的SQL性能问题。

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左右两遍都是索引 索引才会生效,否则失效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: