索引

实例
CREATE TABLE `emp` ( `id`
int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', `age` int(11) NOT NULL DEFAULT '0' COMMENT '年龄', `job` varchar(20) NOT NULL DEFAULT '' COMMENT '职位', `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='员工记录表'; ALTER TABLE emp ADD INDEX idx_emp_nameAgeJob (NAME, age, job) //这条语句创建索引,alter table emp add index 索引名(列1,列2,。。。)

创建一个emp表,设置数据库引擎ENGINE=InnoDB

创建索引三种方式:1.CREATE INDEX indexName ON table_name (column_name) //如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

2.ALTER table tableName ADD INDEX indexName(columnName)

3.CREATE TABLE mytable(

ID INT NOT NULL,   
username VARCHAR(16) NOT NULL,  
INDEX [indexName](username(length))  //具体选哪种方式创建 看你喜欢
);

删除索引:DROP INDEX [indexName] ON mytable;

查看索引:SHOW INDEX FROM tablename;

唯一索引:不同的就是,索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一,且唯一键跟唯一索引没有关联。

创建唯一索引:1.CREATE UNIQUE INDEX indexName ON mytable(username(length)) //length长度小于等于username长度

2.ALTER table mytable ADD UNIQUE [indexName](username(length))

3.CREATE TABLE mytable(

ID INT NOT NULL,   
username VARCHAR(16) NOT NULL,  
UNIQUE [indexName](username(length)));

一般来说,MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁;
(3)没有事务。

InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)更新和查询都相当频繁,并且锁定的机会比较大的情况

意义:拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字

主要事项:

1.创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)

简单来说,我们创建索引的目的是为了查询的时候更快,而把索引当做查询条件来用的

2.创建索引会在磁盘上生成索引文件

3.缺点:一张表可以多个列创建索引,虽然索引大大提高了查询速度,索引越多同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件

 4.在关系型数据库中,如果上万甚至上亿条记录在查找记录的时候,想要获得非常快的速度,就需要使用索引

5.索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度

6.索引的效率取决于索引列的值是否散列,即该索引列的值相同的越少效率越高,如果索引列的值一半‘小明’一半‘小红’,那么对这个列设置为索引就没意义

7.对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一

8.保证一个列唯一不重复的办法那么除了唯一键,也可以创建唯一索引了

总结:我们一般使用具有唯一性的列来创建唯一索引,目的是提升查询效率,创建了索引的列,当我们使用作查询条件进行查询时会比没有对该列设置索引的情况下查询更快,但也不能滥用索引,因为会产生索引文件来存放这些索引,如果索引文件太多,进行插入,修改,删除操作时会去读写这些索引文件降低效率。

原文地址:https://www.cnblogs.com/hebiao/p/14276177.html