MySql(21)------mysql索引使用
来源:互联网 发布:汉王人脸考勤机数据库 编辑:程序博客网 时间:2024/05/29 18:32
一 概要
索引是数据库中用于提高性能最常用的工具,所有的mysql列类型都可以使用索引,每个表的最大索引数
和索引长度根据表的存储引擎而定,一般情况下每个表至少支持16个索引,索引总长度至少为256个字节,
有些存储引擎的索引限制会更高些。
常见存储引擎支持的索引:
(1)对于MyISAM和InnoDB存储引擎表的默认创建索引为BTREE索引。同时也支持全文索引,该索引
用于全文搜索,目前全文索引只能用于CHAR, VARCHAR以及TEXT类型列,索引针对整个列进行,不支持局部索引。
(2)InnoDB存储引擎默认也是BTREE索引,同时也支持HASH索引的方式。
(3)MEMORY存储引擎默认使用HASH索引,同时也支持BTREE索引方式。
******创建语法:
索引的创建可以随表建立时创建,也可以在表创建完后添加。
创建新索引:
CREATE [UNIQUE\FULLTEXT\SPATIAL\NORMAL] INDEX index_name [USING index_type] ON table_name(index_col_name,...)
其中index_col_name部分的内容:
col_name[(length)][ASC][DESC]
eg:
CREATE UNIQUE INDEX userName_index USING BTREE ON t_user_main (f_userName);
其中如语法所诉,USING BTREE表使用BTREE索引方式,如果不写,就使用表的存储引擎
默认的索引方式,如果不指定UNIQUE,就使用默认NORMAL索引类型。
注意的是[UNIQUE\FULLTEXT\SPATIAL\NORMAL]表示的是索引类型,
[USING index_type]表示的是索引方式,也就是检索方式。
增加索引时使用ALTER TABLE语法增加索引。
******删除索引:
DROP INDEX index_name ON table_name;
eg:
DROP INDEX userName_index ON t_user_main;
二 索引设计原则
索引的创建可以遵循一些千千万万革命同志实践总结出来的原则,对于创建索引提高效率会起到事半功倍的效果。
如果自己一味的去瞎创建索引,可能适得其反,不合理的使用索引对于提高效率起到的只是相反的作用。
设计原则,简单列举几个:
(1) 搜索的索引列,并不一定是选择的列。也就是说,最恰当的索引列应该是在WHERE子句中,
或者是连接子句中连接的列,而不是SELECT后面指定的查询列。简单来说,搜索的索引列是用来
作为查询条件或关联条件的,方便查询时能对条件或关联列进行特殊处理,从而提高查询效率。
(2)使用唯一索引。唯一的含义就是这个作为索引的列存的数据尽可能的不同,存的数据是唯一的,
比如存身份证号码的列上创建一个唯一索引,效果会很好,而对于存性别的列上创建一个唯一索引,
就没有啥效果,因为每次通过男或女去查询,都能筛选出一半数据。
(3)使用短索引。一些列中存放的数据很长,但是可以设计数据的前10个或20个是唯一的,这样创建索引
时可以正对该列的前10个或20个字符进行短索引创建,不用全局匹配,能够提高效率。
(4)尽可能不要过度的创建索引。物极必反,合理使用。
三 BTREE索引和HASH索引
MEMORY引擎表创建的默认索引是HASH索引,但是也可以使用BTREE索引,这两种索引有一定的使用范围。
HASH索引的使用范围:
(1)只用于=或<=>比较等式
(2)优化器不能使用HASH索引加速ORDER BY 操作,相生相克
(3)MySql不能确定在两个值之间有多少行,如果强行将MyISAM引擎表改为HASH索引的MEMORY引擎表,
效率会受到影响。
(4)只能使用与整个关键字搜索一行
BTREE索引的使用范围:
(1)>,<,>=,<=,BETWEEN,!=或<>可以使用BTREE索引
(2)like 'pattern',其中pattern不以通配符开头时,比如like 'kkkkk%'时可以使用BTREE索引,而like '%kkkkk'不能使用BTREE索引。
注意: SQL编写时按照使用原则,让自己创建的索引使用上,否则白创建了
- MySql(21)------mysql索引使用
- 【mysql索引学习一】mysql索引使用
- 使用MYSQL索引
- MYSQL索引的使用
- MySQL索引的使用
- mysql 索引的使用
- MYSQL索引使用
- 合理使用mysql索引
- MySQL索引 使用笔记
- MySQL索引的使用
- Mysql索引的使用
- MySQL索引的使用
- MySQL索引的使用
- MySQL使用解析--索引
- [MySQL]什么时候使用索引
- MYSQL索引使用
- MySQL索引的使用
- MySQL索引 使用笔记
- iOS NSAttributedString所有文本属性详解(多图)
- PHP编译安装memcache扩展
- 企业HTML5前端开发最需要的技能及技术难点分析
- Shell脚本 输出当前目录下某文件夹中的非空文件
- 怎样看Mac的日志
- MySql(21)------mysql索引使用
- 名词解释: amd64fre
- Android数据存储方式(一)文件
- Ajax实现局部刷新和异步处理简单应用(实现简单注册验证)
- Linux进程分配内存的两种方式--brk() 和mmap()
- android--UI--listview使用和优化
- JavaScript 原型中的哲学思想
- 架构师—软件系统实施方案选择
- sizeof大小