关于索引的使用
1、最适合建索引的列有:where后边的、联接(join)条件相关的列、
order by相关的列、group by 相关的列。
2、数据量区分度要大些,如男女数据量各占50%的就不需要建索引。
3、索引的长度(体积)尽可能的小。
4、复合索引要充分满足最左前缀。如:建的复合索引为
(state、city、zip),则能命中索引的条件有:
state、city、zip
state、city
state
5、索引建的数量要适当,因为索引多的话,查询快了,但是更新慢。
6、InnoDB,MYISAM总是使用B+树索引。MEMORY存储引擎默认使用Hash索引.
Hash索引在使用“=”,“<=>”比较快,范围查找比较慢,如:id<30或者weight
between 100 and 150.而“B树”范围查找比较快
索引类型
1.普通索引 index
创建:CREATE INDEX index_name ON table(column(length))。
修改:ALTER TABLE table_name ADD INDEX index_name ON (column(length))
创建表的时候同时创建索引:
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) CHARACTER NOT NULL ,
content
text CHARACTER NULL ,
time
int(10) NULL DEFAULT NULL ,
PRIMARY KEY (id
),
INDEX index_name (title(length))
)
删除:DROP INDEX index_name ON table。
2.唯一索引 unique index
索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。
创建:CREATE UNIQUE INDEX indexName ON table(column(length))
修改:ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
创建表的时候直接指定:
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) CHARACTER NOT NULL ,
content
text CHARACTER NULL ,
time
int(10) NULL DEFAULT NULL ,
UNIQUE indexName (title(length))
);
3.主键索引 key index
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) NOT NULL ,
PRIMARY KEY (id
)
);
4.组合索引
ALTER TABLE table
ADD INDEX name_city_age (name,city,age);
5.全文索引 fulltext index
主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
先建表后加全文索引比建表的同时创建全文索引,写入的速度要快很多。
CREATE FULLTEXT INDEX index_content ON article(content)
CREATE TABLE table
(
id
int(11) NOT NULL AUTO_INCREMENT ,
title
char(255) CHARACTER NOT NULL ,
content
text CHARACTER NULL ,
time
int(10) NULL DEFAULT NULL ,
PRIMARY KEY (id
),
FULLTEXT (content)
);
ALTER TABLE article ADD FULLTEXT index_content(content)。
慢查询
开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,
通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
//查询mysql的查询相关的启动配置参数
show variables like ‘query%’;
set global slow_query_log=’ON’; //开启慢查询日志
//慢查询日志存放位置
set global slow_query_log_file=’/usr/local/mysql/data/slow.log’;
set global long_query_time=1;//查询超过1秒就记录
select sleep(4);//执行一条慢查询SQL语句
MySQL索引方法
MySQL目前主要有以下几种索引方法:B-Tree,Hash,R-Tree。
B-Tree索引
B-Tree是最常见的索引类型,所有值(被索引的列)都是排过序的,
每个叶节点到根节点距离相等。所以B-Tree适合用来查找某一范围
内的数据,而且可以直接支持数据排序(ORDER BY)
B-Tree在MyISAM里的形式和Innodb稍有不同:
MyISAM表数据文件和索引文件是分离的,索引文件仅保存数据记录的磁盘地址
InnoDB表数据文件本身就是主索引,叶节点data域保存了完整的数据记录
Hash索引
1.仅支持”=”,”IN”和”<=>”精确查询,不能使用范围查询:
2.不支持排序:
3.在任何时候都不能避免表扫描。
通过访问表中的实际数据进行相应的比较,并得到相应的结果。
4.检索效率高,索引的检索可以一次定位,Hash索引的查询效率要远高于B-Tree索引。
5.只有Memory引擎支持显式的Hash索引,它也支持B-Tree索引。
R-Tree索引
略
———–http://www.cnblogs.com/luyucheng/category/920876.html-------------
——-未完,待续——-