mysql有几种索引类型?使用索引时都有那些地方要注意?sql优化原则是什么?
mysql的索引类型及使用索引时的注意事项有:
一、普通索引。这是最基本的索引,它没有任何限制。它有以下几种创建方式:
1、创建索引
代码如下:
CREATE INDEX indexName ON mytable(username(length));
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。
2、修改表结构
代码如下:
ALTER mytable ADD INDEX [indexName] ON (username(length)) -- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
-- 删除索引的语法:
DROP INDEX [indexName] ON mytable;
二、唯一索引。它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
代码如下:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
三、主键索引。它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:
代码如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
当然也可以用 ALTER 命令。记住:一个表只能有一个主键。
四、组合索引。为了形象地对比单列索引和组合索引,为表添加多个字段:
代码如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL );
为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:
代码如下:
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);[code]
建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。
如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:usernname,city,age usernname,city usernname 为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:
[code]
SELECT * FROM mytable WHREE username="admin" AND city="郑州" SELECT * FROM mytable WHREE username="admin"
Mysql几种索引类型的区别及适用情况
如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。那么,这几种索引有什么功能和性能上的不同呢?FULLTEXT即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一提的是,在数据量较...
mysql有几种索引类型?使用索引时都有那些地方要注意
MySQL索引类型包括:一、普通索引 这是最基本的索引,它没有任何限制。有以下几种创建方式:1.创建索引 代码如下:CREATE INDEX indexName ON mytable(username(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。2.修改表结构 代码如下:ALTER ...
mysql索引类型有哪些
一个表可以有多个单列索引;唯一索引:索引列的值必须唯一,但允许有空值;复合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并;聚簇索引:也可以称为主键索引,是一种数据存储方式,B+树结构,一张表只能有一个聚簇索引;非聚簇索引:顾名思义,不是聚簇索引。
mysql的key是什么意思?
MySQL中的key指的是索引,在数据库中,索引可以提高查询的速度,类似于书籍内的索引页,能够快速定位到所需信息。MySQL的索引有多种,包括普通索引、唯一索引、主键索引和全文索引等。可以通过使用适当类型和数量的索引来优化数据库查询,提高系统性能。MySQL中的key还可以代表密码等敏感信息进行加密的密钥。
mysql之普通索引和唯一索引
第一种情况是,这个记录要更新的目标页在内存中 这时,InnoDB 的处理流程如下:第二种情况是,这个记录要更新的目标页不在内存中 这时,InnoDB 的处理流程如下:mysql> insert into t(id,k) values(id1,k1),(id2,k2); 当前 k 索引树的状态,查找到位置后,k1 所在的数据页在内存 (InnoD...
MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别...
PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键。 就是 唯一 且 不能为空。INDEX 索引,普通的 UNIQUE 唯一索引。 不允许有重复。FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表 有下列字段:会员编号 INT...
索引的种类
RTREE在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。相对于BTREE,RTREE的优势在于范围查找。ps. 此段详细内容见此片博文:Mysql几种索引类型的区别及适用情况 三、索引种类 普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有null)...
如何正确合理的建立MYSQL数据库索引
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:CREATE TABLE mytable( IDINTNOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:...
MySQL索引类型
MySQL目前主要的索引类型有下面几种:与前面的普通索引类似,但是他的索引列的值必须是唯一的,所以叫唯一索引,但是这个索引字段如果是空值是可以的,具体创建方式如下:主键索引是一种特殊的索引,一个表只能有一个主键,不允许有空值,一般是创建表的时候创建主键索引,而且一般习惯设置成自增的,因为对弈MySQL的...
MySQL——关于索引的总结
首先我们还是先把表结构说下:用户表tb_user结构如下:不要在索引列上进行运算操作,索引将失效。空间索引:空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间...
狂景硫酸: 主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE.
宁乡县15358236239: MYSQL数据库索引类型都有哪些 - ?
狂景硫酸: 主要有这些: PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键. 就是 唯一 且 不能为空. INDEX 索引,普通的 UNIQUE 唯一索引. 不允许有重复. FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的.
宁乡县15358236239: Mysql支持哪几种索引 - ?
狂景硫酸: 从数据结构角度1、B+树索引(O(log(n))).2、hash索引:a 仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询 b 其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节...
宁乡县15358236239: MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合? - ?
狂景硫酸: PRIMARY, INDEX, UNIQUE 这3种是一类 PRIMARY 主键. 就是 唯一 且 不能为空.INDEX 索引,普通的 UNIQUE 唯一索引. 不允许有重复.FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的.举个例子来说,比如你在为某商场做...
宁乡县15358236239: mysql innodb 有哪些索引类型 - ?
狂景硫酸: 1、B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理2、hash索引:a 仅仅能满足"=","IN"和""查询,不能使用范围查询 b 其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引 c 只有Memory存储引擎显示支持hash索引3、FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了)4、R-Tree索引(用于对GIS数据类型创建SPATIAL索引)
宁乡县15358236239: 如何理解并正确使用MySql索引 - ?
狂景硫酸: MySQL索引类型包括:(1)普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式:◆创建索引 CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如...
宁乡县15358236239: mysql索引类型解释 - ?
狂景硫酸: 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一个索包含多个列. MySQL索引类型包括: (1)普通索引 这是最基本的索引,它没有任何限制.它有以下几...
宁乡县15358236239: 为什么使用MySQL索引 - ?
狂景硫酸: 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧. 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 索引的优点 1、大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2、帮助服务器避免排序和临时表 3、可以将随机I/O变为顺序I/O
宁乡县15358236239: 什么是索引 分为那些类型 - ?
狂景硫酸: 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面的记录数量越多,这个操作的代价就越高...
宁乡县15358236239: mysql中的索引怎样使用btree索引 - ?
狂景硫酸: B-Tree 索引是 MySQL 数据库中使用最为频繁的索引类型,除了 Archive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引.不仅仅在 MySQL 中是如此,实际上在其他的很多数据库管理系统中B-Tree 索引也同样是作为最主要的索引类型...