标签:mysql
mysql索引
注意:创建索引的基本原则
索引要建在使用比较多的字段上
尽量不要在相同值比较多的列建立索引,比如性别、年龄等字段
对于经常进行数据存取的列不要建立索引
对于有外键引用的表,在主键和外键上建立索引
1、普通索引
索引创建的三种方式=====
主键是一种特殊索引
表已创建 ===help create index;
create index ipaddr_idx on test(ipaddr);
mysql> create index ipaddr_idx on weblog(ipaddr DESC) using btree; ====hash
alter table zzz add index (ipaddr)
mysql> create table stu (id int primary key,name varchar(30),sex enum(‘man‘,‘wom‘),score float(4,1),addr varchar(60),index addr_idx (addr));
drop index ipaddr_idx on test;
(1)在employees表中查询first_name以Mery开头的所有员工
(2)在employees表中查询first_name包含mar字符的员工
(3)在employees表中查询last_name以He开头的员工
(4)在employees表中查询last_name包含oo字符的员工
explain select * from employees where first_name like ‘Mery%‘\G
explain select * from employees where first_name like ‘%mar%‘\G
2、唯一索引 =====列值必须唯一,但允许有空值
mysql> create unique index size_idx on weblog(size);
3、全文索引===================用于在char,varchar,text等文本类型的字段中
create fulltext index flname_idx on employees(first_name,last_name);
练习:观察下列查询在没有建立索引前所使用的时间和 索引后所使用的时间,建立索引后下列那些查询没有使用索引。
mysql> select * from employees where match(first_name,last_name) against(‘Mary‘)
###############单列索引、多列索引
4、聚集索引
对于innodb存储引擎
如果表里面包含有主键,直接使用主键做聚集索引
如果没有主键,则将第一个包含not null属性的unique index列作为聚集索引
如果前两个条件都不满足,则mysql会自动增加一个autoincrement的列作为聚集索引
5、空间索引
索引使用总结:
(1)索引一般在<,>,<=,>=,between,in以及某些情况下的like等操作符上才能使用
(2)如果使用like,则%或_不能位于开头
(3)如果使用多列索引,则第一列必须包含匹配的条件
(4)如果在列上使用函数则不能使用索引
<> =============primary key使用索引==其他索引不使用
mysql> explain select * from employees where first_name like ‘o%‘ and last_name like‘m%‘\G
索引的缺点:
创建索引会占用磁盘空间,尤其是表很大且创建索引的字段值比较多且内容比较长的话更是如此
对于写入操作,如insert、update、delete等操作,索引会降低它们的速度
show variables like ‘%query%‘;
mysql> show status like ‘%qcache%‘; ======mysql可以通过缓存查看数据
本文出自 “kenasel” 博客,请务必保留此出处http://kenasel.blog.51cto.com/10620829/1839503
标签:mysql
原文地址:http://kenasel.blog.51cto.com/10620829/1839503