Py学习  »  DATABASE

MySQL优化索引适合场景

周行知 • 5 年前 • 228 次点击  

建表

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;





索引适合场景

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

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

设置

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


黄金索引

例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);



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

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


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


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


结论:

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

xxx% yyy_使用索引

%周行知%不使用索引

复合索引

 show create table emp;

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


OR原则

OR左右的关联条件

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


OR的左右必须有索引


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/AaXTuZSGYI
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28105
 
228 次点击