Mysql学习笔记(八)索引

原文:Mysql学习笔记(八)索引

PS:把昨天的学习内容补上...发一下昨天学的东西....五月三日。。。继续学习数据库...

学习内容:

索引....

索引的优点:

1.通过创建唯一索引,可以保证数据库每行数据的唯一性...

2.使查找的速度明显加快...

3.当使用分组和排序进行查询时,可以缩短时间...  

索引的缺点:

1.维护索引需要耗费数据库的资源...

2.索引需要占用磁盘空间...

3.对表进行增删改的时候,由于索引的存在,时间会有所增加...

索引的分类...

普通索引和唯一索引...

普通索引和唯一索引大致相同,都是属于b-tree结构....唯一不同点就是唯一索引的数据列可以为空,并且每一行的索引列的数据唯一...

单列索引和复合索引...

单列索引就是定义一个索引的参数是唯一一个,复合索引就是定义索引的时候包含的参数可以是多个...并且复合索引的查询必须要使用第一个字段,否则会产生不走索引的情况...原因是复合索引遵循最左前缀集合...

全文索引

全文索引就是定义索引的列上支持值的全文查找,允许在这个列上插入重复值和空值,全文索引可以在字符或者文本上进行定义...存储引擎为Myisam...

空间索引

空间索引必须在myisam表进行创建...是对空间的数据类型的字段建立的索引..空间数据类型有四种geometry,point,linestring,polygon...空间索引使用关键字spatial进行扩展...(说实话,我也不完全清楚空间索引到底能用在什么地方)...

创建索引的语句....

CREATE TABLE table_name[col_name data type]
[unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]

普通索引:

create table book
(
    bookid int not null,
    bookname varchar(255) not null,
    author varchar(255) not null,
    info varchar(255) not null,
    comment varchar(255),
    year_publication year not null,
    index(year_publication)
);
show create table book;//显示我们建立的表格的相应信息...
insert into book values(1,‘java‘,‘James Gosling‘,‘good‘,‘good‘,1982);

explain select * from book where year_publication=1982;

显示数据会有很多的属性..简单的介绍一下...

id:第几个..select_type:表示查询语句select的复杂程度..table:表格名称...type:访问类型..possible_key:显示索引...key:索引的个数...

key_len:显示使用索引的字节数...ref:显示哪个列被用于索引查找...rows:找到索引所要读取的行数...extra:表示不适合在列中显示,但是又很重要的额外信息...

唯一索引:

唯一索引列的索引值必须唯一,如果是复合索引,复合索引的列组合的值也必须唯一...

create table t1
(
   id int not null,
   name varchar(255) not null,
   age int not null,
   info varchar(255),
   unique index multidx(id,name)//复合唯一索引...
);

Insert into t1 values(1,‘we‘,20,‘misaya‘),(2,‘omg‘,21,‘gogoing‘);

使用explain查询语句...

explain select * from t1 where id=1 and name="we";//使用索引进行查找...
explain select * from t1 where name="we"//造成了不走索引。。未遵循匹配最左前缀原则...

全文索引...

Fulltext索引可以用于全文索引...只有myisam存储引擎支持全文索引..全文索引不支持过滤索引..

CREATE TABLE t4 (
  id INT NOT NULL,
  NAME CHAR(30) NOT NULL,
  age INT NOT NULL,
  info VARCHAR (255),
  FULLTEXT INDEX FulltxtIdx (info)
) ;
insert into t4 values(1,‘we‘,20,‘misaya‘);//插入数据

select * from t4 where match(info) against(‘misaya‘);//使用全文索引来查找数据..

空间索引:空间索引,用于地理空间类型...自己弄得也不是很明白...所以在这里不进行介绍,避免误人子弟...

在已有的表中去加入索引....

两种方式:

create table t1
(
   id int not null,
   first_name varchar(255) not null,
   last_name varchar(255) not null,
   dob date not null
);

//添加索引....

第一种方式....

alter table table_name add[unique][filltext][spatial] 【index】【key】[index_name] (属性值) 【asc】【desc】.....

alter table t1 add index firstidx(first_name);//使first_name成为索引...

show index  from t1;//查看我们建立的索引...

第二种方式....

create [unique][filltext][saptial] 【index】 on table_name(属性值)【asc】【desc】//这个不支持key,。插入key会报错...
create index lastidx on t1(last_name);//使last_name为索引...

删除索引:

两种方式

1.alter table table_name drop index index_name;

alter table t1 drop index firstidx;//删除索引...

2.drop index index_name on table_name;

drop index lastidx on t1;//删除索引lastidx...

注意:anto_increment 约束字段的唯一索引是不允许被删除的....

无论是添加了索引还是删除了索引,我们都可以使用shou create table table_name来查看数据表建立的情况....

时间: 2025-01-05 14:53:40

Mysql学习笔记(八)索引的相关文章

MySQL学习笔记(三)—索引

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

MySQL学习笔记-理解索引index

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

MySQL学习笔记八:日期/时间的处理

MySQL日期时间的处理,在其官网文档上都有详细的阐述,想了解更多的同学可自行查阅. 1.查询当前日期时间:函数有now(),localtime(),current_timestamp(),sysdate(). mysql> select now(),localtime(),current_timestamp(),sysdate(); +---------------------+---------------------+---------------------+--------------

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

Linux System Programming 学习笔记(八) 文件和目录管理

1. 文件和元数据 每个文件都是通过inode引用,每个inode索引节点都具有文件系统中唯一的inode number 一个inode索引节点是存储在Linux文件系统的磁盘介质上的物理对象,也是LInux内核通过数据结构表示的实体 inode存储相关联文件的元数据 ls -i 命令获取文件的inode number /* obtaining the metadata of a file */ #include <sys/types.h> #include <sys/stat.h>

马哥学习笔记八——LAMP编译安装之PHP及xcache

1.解决依赖关系: 请配置好yum源(可以是本地系统光盘)后执行如下命令: # yum -y groupinstall "X Software Development" 如果想让编译的php支持mcrypt扩展,此处还需要下载如下两个rpm包并安装之: libmcrypt-2.5.7-5.el5.i386.rpm libmcrypt-devel-2.5.7-5.el5.i386.rpm 2.编译安装php-5.4.13 首先下载源码包至本地目录. # tar xf php-5.4.13

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