mysql学习笔记之三(索引)

索引

数据库对象索引:一种组合数据的方式,通过索引对象,可以快速查询到数据库对象表中的特定记录,是一种提高性能的最常用方式。

一个索引会包含表中的按照一定顺序排序的一列或多列字段。

索引操作:

创建索引,修改索引,删除索引。

数据库对象索引主要为了提高从表中检索数据的速度。由于数据存储在数据库表中,所以索引是创建在数据库对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据结构里(B-树或哈希表)中,通过MySql可以快速有效的查找与键值相关联的字段。根据索引的存储类型,可以将所以分为B型树索引和哈希索引

注意:InnoDB和MyISAM存储引擎支持Btree类型索引,MEMORY存储引擎支持Hash类型索引,默认为前者索引。

数据库对象索引的出现,除了提供数据库管理系统的查找速度,而且还可以保证字段的唯一性。从而实现数据库表的唯一性。

六种索引:普通索引,唯一索引,全文索引,单列索引,多列索引,空间索引

利弊:

利:提高查找速度

弊:过多索引占用磁盘空间

适合创建索引的情况:

1、经常被查询的字段,即在where中出现的字段

2、分组的字段,即在group by中出现的字段

3、存在依赖关系的字表和父表之间的联合查询,即主键或外键字段

4、设置唯一完整性的字段

不适合创建的情况:

1、在查询中很少被使用的字段

2、拥有许多重复值的字段
普通索引

创建:

三种方式:

1、创建表时创建索引

2、在已经存在的表上创建索引

3、通过SQL语句在ALTER TABLE来创建

1、create table tablename(

column1 type,

column2 type,

....

INDEX|KEY [indexname] (columname [(长度)] [ASC|DESC])

)

通过index或key来指定字段为索引。

在创建索引时,可以指定索引的长度。这是因为不同存储引擎定义了标的最大索引数和最大索引长度

mysql所支持的存储引擎对每一个表至少支持16个索引,总索引长度至少为256字节

create table t_index1(

id int,

name varchar(20),

loc varchar(20),

index index_id(id)

)

之后向表里插入多条记录(这是必须的,如果只有一条记录,出现不了下面的字样),然后执行

explain select * from t_index1 where id=1\G

之后出现

possible key:index_id

key:index_id

的字样之后就说明id的索引对象被启用

2、在已经存在的表上创建普通索引

create index indexname on tablename(column[(长度)][asc|desc])

create index index_name on t_index1(name)

验证:

explain select * from t_index1 where id=1\G

字样出现

possible key:index_name

key:index_name

3、通过SQL语句alter table 创建普通索引

alter table tablename add index|key indexname(columnname[(length)][asc|desc])

又见识到create和alter的两个功能。修改索引会不会用alter呢?删除索引会不会用drop呢?往后看看

唯一索引

1、创建表时创建唯一索引

create table tablename(

column1 type,

column2 type,

...

unique index|key indexname(column[(length)][asc|desc])

)

所谓的唯一索引就是在普通索引上添加上关键字UNIQUE。

2、在已经存在的表上创建一个唯一索引

试着自己写写

create unique index indexname on tablename(columname[(长度)][asc|desc])

完全OK

3、通过SQL语句alter table创建索引

alter table tablename add unique index|key indexname(columnname[(length)][asc|desc])

全文索引

全文索引主要关联在数据类型为char,varchar,text字段,以便能够更加快速查询数据量较大的字符串类型的字段

mysql从3.23.23版本开始支持全文索引,只能在存储类型为myISAM的数据库表上创建全文索引。

默认情况下,全文索引的搜索方式为不区分大小写,如果全文索引所关联的字段为二进制数据类型,则以区分大小写的搜索方式执行。

关键字:fulltext index

三种创建方式跟上面的类似,将index关键字写成fulltext index就是创建了全文索引

多列索引

在创建索引时,所关联的字段不是一个字段,而是多个字段

虽然可以通过所关联的字段进行查询,但是只有查询条件使用了所关联字段中的第一个字段,多列索引才会被使用。

create table t_name(

column1 type,

column2 type,

...

index|key index_columni_columnj(columni[(length)][asc|desc],columnj[(length)][asc|desc])

)

其他两种创建方式类推一下就可以了。

六种索引:普通索引,唯一索引,全文索引,单列索引,多列索引,空间索引

一共是六种,这里讲到了三种。

网上搜索到的空间索引

空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,

分别是GEOMETRY、POINT、LINESTRING、POLYGON。

MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须

将其声明为NOT NULL,空间索引只能在存储引擎为MYISAM的表中创建

create table index6(

id int,

space geometry not null,

spatial index index6_sp(space)

);

以上都是创建索引,有创建就得有删除

删除索引

drop index indexname on tablename

语法很简单。

时间: 2024-11-06 03:28:14

mysql学习笔记之三(索引)的相关文章

MySQL学习笔记之三 表类型

你能用的数据库引擎取决于MySQL在安装时候是如何被编译的.要添加一个新的引擎,就必须编译MySQL.仅仅为了添加一个特性而编译应用程序的想法对于Windows的开发人员来说可能有点小题大做,得不偿失,但是在Unix的世界里,这已经成为了标准.在缺省的情况下,MySQL支持三个引擎:ISAM.MyISAM和HEAP.另外两种类型InnoDB和Berkley(BDB),也常常可以使用. ISAM ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之初就考虑到数据库被查询的次数远远大于

MySQL学习笔记(三)—索引

一.概述 1.基本概念       在大型数据库中,一张表中要容纳几万.几十万,甚至几百万的的数据,而当这些表与其他表连接后,所得到的新的数据数目更是要大大超出原来的表.当用户检索这么大量的数据时,经常会感觉慢.这个时候要提高数据库的检索性能,就必须要用到索引.给表追加合适的索引能极大的改善数据检索的效率,提供数据库性能.      索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,而且每种存储引擎也不一定支持所有的索引类型.      所有存储引擎支持每个表至多16个索引,总索

MySQL学习笔记-理解索引index

1.索引就是一本书的目录,当查询表中的某行数据时,可以根据索引迅速定位该行的位置并将其返回为结果集.在MySQL的目录下,有一个data目录里面存放着数据库中的所有结构,数据和索引..frm文件存放表的结构,.MYD存放着数据,.MYI为索引文件.数据以二进制的形式存放在.MYD文件中..MYI文件以某种高效的数据结构存放数据,例如平衡二叉树,当查询数字时,会快速地定位数据的位置. 2.索引提高了查询速度,然而却降低了增删改的速度,因为每当修改数据时,总是要修改索引文件.一般在查询频率较高且重复

Mysql学习笔记(八)索引

原文:Mysql学习笔记(八)索引 PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日...继续学习数据库... 学习内容: 索引.... 索引的优点: 1.通过创建唯一索引,可以保证数据库每行数据的唯一性... 2.使查找的速度明显加快... 3.当使用分组和排序进行查询时,可以缩短时间... 索引的缺点: 1.维护索引需要耗费数据库的资源... 2.索引需要占用磁盘空间... 3.对表进行增删改的时候,由于索引的存在,时间会有所增加... 索引的分类... 普通索引和唯一索引

mysql学习笔记 第五天

使用分区数据表: 分区数据表和merge数据表具有相似的作用,但是分区数据表确确实实是一个数据表 ,不像merge是列出数据表的逻辑关系,并且分区数据表可以包括像myisam以外的 的数据表.创建分区数据表: create table 里给出数据列和索引,然后用partition by 定义一个用来把数据行分配 到各个分区的分区函数:[将数据表分成四个区] create table log_partition( dt datetime not null, info varchar(100) no

mysql学习笔记 第四天

mysql引擎: archive(档案)[数据插入以后不能被修改,只读] blackhole[这种写操作是删除数据,读操作是返回空白记录] CSV[在储存数据时以逗号作为数据项之间的分隔符] example[示例(存根)储存引擎] Falcon[用来进行处理事务的储存类型] federated[用来访问远程数据表的储存引擎] InnoDB[具备外键支持功能的事务处理引擎] memory[内存里的数据表] merge[用来管理多个MyISAM数据表构成的数据表集合(merg-myisam)] my

MySQL学习笔记—SQL服务器模式汇总

MySQL学习笔记-SQL服务器模式汇总 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用–sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(–sql-mode ="&q

MySQL学习笔记之五 有关数据表操作

MySQL在创建表的时候,创建一个.frm文件保存表和列定义.索引存储在一个有.MYI(MYindex)扩展名的文件并且数据存储在有.MYD(MYData)扩展名的文件中.   一.用SHOW/ DESCRIBE语句显示数据表的信息 语法: SHOW TABLES [FROM db_name] [LIKE wild] or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild] or SHOW INDEX FROM tbl_name [FROM

mysql学习笔记-简介

1.数据存储方式3个阶段 1.人工管理阶段 2.文件系统阶段 3.数据库系统阶段 数据库组成 1.数据库由若干张表组成,表由若干个字段组成 2.关系数据库的表都是二维表 2.数据库泛型(创建数据库必须满足的要求) 1.第一范式(1NF):设计数据库满足的最低要求表中不能有重复字段,并且每个字段不能在拆分 3.数据库技术构成 1.数据库系统 2.sql语句 3.数据库访问技术等 4.sql语言分类 1.DDL(数据定义语言):主要用于创建表,视图,索引,触发器等.其中包括CREATE(创建表),A