数据库—密集索引、稀疏索引、优化慢查询SQL、索引越多越好?

密集索引和稀疏索引的区别

密集它是一一对应

稀疏是一个对应多个值

 

 

 

InnoDB

采用主键 >第一个非唯一 >非空唯一 >生成隐藏作为密集索引(唯一)

 

shop_info_large 表是InnoDB

有两个文件 InnoDB索引和数据是存在一起的*.ibd

一个frm 表结构

ibd是数据内容

shop_info_small 表是myisam

MyISAM索引和数据是分开存储的

*MYI存储索引

*MYD存储数据

 

InnoDB如果不是索引主键,那么要在索引找到然后再去主键索引全部信息

 

 

SQL慢查询优化

如何定位并优化慢查询SQL

具体场景具体分析,只提出大致思路

根据慢日志定位查询SQL

使用explain等工具分析SQL

修改SQL或者尽量让SQL走索引

 

show variables like '%quer%';

查看那些日志,查看慢查询是否打

日志文件

打开慢查询

set global slow_query_log=on;

设置慢查询最大时间超过一秒就记录为慢查询

set global long_query_time=1;

 

show status like '%slow_queries%';查看慢SQL条数

 

慢SQL日志文档,在Linux系统中 使用vi或者vim进行查看

query_time 查询时间是6秒 老师讲的

 

Explain关键字段

type

extra

 

type

左边到右边 最优到最差 index 和all 都是全盘扫描 这个两种情况是最差的

 

 

extra

出现这2项 Using filesort 和Using temporary 意味着MySQL根本不能使用索引,效率会受到重要影响,应尽可能对此进行优化

 


 

create table `person_info_large`(

  `id` int(7) not null auto_increment,

  `account` varchar(10) default null,

  `name` varchar(20) default null,

   `area` varchar(20) default null,

   `title` varchar(20) default null,

   `motto` varchar(50) default null,

    PRIMARY KEY(`id`)

    unique key `account`(`account`)

    key `index_area_title`(`area`,`title`)

)


 

 

 

 

 

 

比如 这里索引使用的是name 但是 name 它不是索引键 所以相对慢一下

 但是 它的查询时间 相对比较长 这里就是用索引 进行优化 它会提升百分之30

使用了 account 它是唯一索引

这里可一个添加一个索引 然后给他进行优化

aler table person_info_large add index idx_name(name)

时间优化了百分之30,因为 name 不是索引

 

额外知识 查询 count多少行

explain select  count(id) from person_info_large;

它是按照最优化的索引 进行使用 唯一索引

可以强制 进行索引设置 但是效率肯定没有 最优化的SQL语句

force index(primary) 强制给他优先使用主键索引使用

explain select count(id) from person_info_large force index(primary);

 

 

最左匹配原则

explain select * from persopn_info_large where title ='AGEDFERA' and area="dadwea"

1.最左前缀匹配原则,非常重要的原则,MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,

比如 a=3 and b=4 and c>5 and d=6 如果建立(a、b、c、d)顺序的索引,d是用不到索引的,如果建立(a,b,c,d)的索引则都可以用到,a,b,d的顺序可以任意调整

2.=和in可以乱序,不如 a=1 and b= and c=3 键立(a,b,c)索引可以任意顺序,MySQL的查询优化器会帮你优化成索引可以识别的形式

 

索引是建立的越多越好吗?

数据量小的表不需要建立索引,建立会增加额外的索引开销

数据变更需要维护索引,因此更多的索引以为着更多的维护成本

更多的索引意味着也需要更多的空间

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值