MySQL优化索引适合场景

建表

create table emp(

empno  int(10) unsigned  NOT NULL DEFAULT '0'  COMMENT '雇员ID',

ename  varchar(20) NOT NULL DEFAULT '' COMMENT ' 名字',

job varchar(9) NOT NULL DEFAULT '',

mgr mediumint(8) unsigned NOT NULL DEFAULT '0',

hiredate date NOT NULL,

sal decimal(7,2) NOT NULL,

comm decimal(7,2) NOT NULL,

deptno mediumint(8) unsigned NOT NULL DEFAULT '0',

epassword char(32) DEFAULT ' ',

key    `empno`  (`empno`),

key  `ename`    (`ename`,`job`)


) engine=myisam DEFAULT charset=utf8;


MySQL优化索引适合场景_第1张图片



MySQL优化索引适合场景_第2张图片


索引适合场景

1)where之后的设置的查询条件字段适合做索引

2)排序查询 order by字段//排序字段适合做索引。

设置

例1  explain select*from  emp order by empno limit 50\G;


MySQL优化索引适合场景_第3张图片

黄金索引

例2 explain select   ename.job   from  emp \G

连接查询

join join on

goods:id name cat_id

category:cat_id name......

在Goods数据表中给外键、约束字段cat_id设置索引,可以提高联表查询的速度

2)左原则

模糊查询,like %

% :关联多个模糊内容

_:关联一个模糊内容

select*from 表名 like  "beijing"

普通索引

alter table emp add index (epassword);



MySQL优化索引适合场景_第4张图片

explain select*from emp where epassword like '%abc%'\G

评析:中间没有出现abc的索引


MySQL优化索引适合场景_第5张图片

例2 explain select*from emp where epassword like  '%abc'\G


MySQL优化索引适合场景_第6张图片

例3 explain select*from emp where epassword like  'abc%'\G


MySQL优化索引适合场景_第7张图片

结论:

查询条件信息在左边出现,就给使用索引

xxx% yyy_使用索引

%周行知%不使用索引

复合索引

 show create table emp;

例1  explain select *from emp where ename like   'abc%'\G


MySQL优化索引适合场景_第8张图片
MySQL优化索引适合场景_第9张图片

OR原则

OR左右的关联条件

explain  select *from emp where empno=12345 or epassword like 'abc%'\G


MySQL优化索引适合场景_第10张图片

OR的左右必须有索引

你可能感兴趣的:(MySQL优化索引适合场景)