建表
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的左右必须有索引