mysql 索引 和mysql 的引擎
1.索引的特点
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
2.索引的优点
第一, 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二, 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三, 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四, 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五, 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
3.索引的缺点
也许会有人要问:增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这种想法固然有其合理性,然而也有其片面性。虽然,索引有许多优点,但是,为表中的每一个列都增加索引,是非常不明智的。这是因为,增加索引也有许多不利的一个方面。
第一, 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二, 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三, 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
4.创建索引的准则(应该在哪些列上创建索引)
第一, 在经常需要搜索的列上,可以加快搜索的速度;
第二, 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
第三, 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
第四, 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
第五, 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;
第六, 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
5.不应该在哪些列上创建索引
第一, 对于那些在查询中很少使用或者参考的列不应该创建索引
第二, 对于那些只有很少数据值的列也不应该增加索引
第三, 对于那些定义为text, image和bit数据类型的列不应该增加索引
第 四, 当修改性能远远大于检索性能时,不应该创建索引
6.通过代码比较有无索引的不同
例:创建一个student的数据表向里面插入1000000条数据
DELIMITER //
create procedure proc3()
begin
declare var int default 1;
while var <=1000000
do insert student values (null,'王尼玛',18);
set var = var +1;
end while;
end //
DELIMITER ;
call proc3();
//把第1276条数据的姓名改为‘张全蛋’;
;
7.创建索引
create index index_name on student(name);
//id和name字段都有索引之后,查询速度相当
8.创建主键索引的3种方式
方式-:
create table student (
id INT NOT NULL,
name VARCHAR(16)NOT NULL,
PRIMARY KEY (id)
);
方式二:
CREATE INDEX index_name ON student (name);
方式三:
ALTER student ADD PRIMARY KEY [indexName]ON (id);
9.普通索引
这是最基本的mysql 数据索引
它没有任何限制
它有以下几种创建方式:
9.1创建索引
create index index_name ON tableName(name[length]);
注意: 如果是CHAR ,VARCHAR 类型,length可以小于字段实际长度;如果是BLOB 和TEXT 类型,必须指定length相同;
9.2修改表结构体
ALTER tableName ADD INDEX [indexName]ON (name);
9.3创建表的时候直接指定
CREATE TABLE tableName(
id INT NOT NULL,
name VARCHAR(16) NOT NULL,
INDEX [index_name](name[length])
);
10.唯一索引
他与前面的普通索引类是,不同就是:
mysql 数据库索引列的值必须唯一,但允许有空值。
如果是组合索引,则列值的组合必须唯一。
10.1创建索引
create UNIQUE index index_name ON tableName(name[length]);
10.2修改表结构体
ALTER tableName ADD UNIQUE [indexName]ON (name);
10.3创建表的时候直接指定
CREATE TABLE tableName(
id INT NOT NULL,
name VARCHAR(16) NOT NULL,
UNIQUE[index_name](name[length])
);
11.全文索引(MyISAM 引擎下才能使用)需要先修改引擎
//修改mysql引擎
CREATE TABLE tableName(
id INT(11) NOT NULL,
name VARCHAR(16) DEFAULT NULL,
PRIMARY KEY(id)
)ENGINE=MyISAM;
例: 给name创建全文索引
CREATE FULLTEXT INDEX indexName ON tableName(name[length]);
12.删除索引的语法
方式一:
ALTER TABLE 表名 DROP INDEX 索引名;
方式二:
DROP INDEX [索引名]ON 表名;
13.查看数据表中的索引方法
show index from student;
14.组合索引
CREATE TABLE mytable(
id INT NOT NULL,
name 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);
建表时,name 16,这里用 10。
这是因为一般情况下名字的长度不会超过10,
这样会加速索引查询速度,
还会减少索引文件的大小,
提高INSERT的更新速度。
如果分别在 name,city,age上建立单列索引,
让该表有3个单列索引,
查询时和上述的组合索引效率也会大不一样,
远远低于我们的组合索引。
虽然此时有了三个索引,
但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。
15. mysql中的引擎有
ISAM 、 MyISAM、 HEAP(也称为MEMORY)、 BLACKHOLE(黑洞引擎)、 InnoDB
mysql 索引 和mysql 的引擎的更多相关文章
- mysql索引总结----mysql 索引类型以及创建
文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...
- ***mysql索引总结----mysql索引类型以及创建
文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...
- MySQL索引,MySQL中索引的限制?
MySQL中索引的限制: 1.MyISAM存储引擎引键的长度综合不能超过1000字节: 2.BLOB和TEXT类型的列只能创建前缀索引: 3.MySQL目前不支持函数索引: 4.使用!= 或者< ...
- 图解MySQL索引(上)—MySQL有中“8种”索引?
关于MySQL索引相关的内容,一直是一个让人头疼的问题,尤其是对于初学者来说.笔者曾在很长一段时间内深陷其中,无法分清"覆盖索引,辅助索引,唯一索引,Hash索引,B-Tree索引--&qu ...
- Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数
mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...
- MySQL索引,MySQL性能分析及explain的使用,分析SQL查询性能
可以使用explain来分析MySQL查询性能,举例如下: 1.使用explain语句去查看分析结果 如 explain select * from test1 where id=1; 会出现: id ...
- mysql索引的一些知识
一.MySQL索引类型 mysql里目前只支持4种索引分别是:full-text,b-tree,hash,r-tree b-tree索引应该是mysql里最广泛的索引的了,除了archive基本所有的 ...
- MySQL 索引优化 btree hash rtree
一.MySQL索引类型 mysql里目前只支持4种索引分别是:full-text,b-tree,hash,r-tree b-tree索引应该是mysql里最广泛的索引的了,除了archive基本所有的 ...
- mysql索引总结(转)
mysql索引总结----mysql 索引类型以及创建 文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好 ...
随机推荐
- coding.net 版本控制
这是版本测试的所有内容,其中用到了 git 和coding的远程连接. 代码及版本控制 git地址:https://git.coding.net/tianjiping/11111.git
- Thunder团队第三周 - Scrum会议3
Scrum会议3 小组名称:Thunder 项目名称:i阅app Scrum Master:代秋彤 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- 3dContactPointAnnotationTool开发日志(十)
要是那几个状态栏不能拖动的话岂不是显得太呆板了,于是我又参考Unity官方视频教程学习了如何实现拖动状态栏的功能,还挺简单的. 比如说要拖动这个PanelStatus面板,我只让使用者通过拖动 ...
- 3dContactPointAnnotationTool开发日志(六)
一种可行的思路就是枚举一个模型的三角面片,然后判断三角形是否与另一个物体相交即可.为了让效果更好我想只渲染模型的线框. 在网上查了半天好像Unity里都没有自带的方便的渲染线框的方式,我又自己 ...
- YaoLingJump开发者日志(六)
作为一只天才魔法少女狐,不会魔法怎么行?于是我给瑶玲增加了一个技能:魔法弹. 当然,能使用魔法的前提是得有个魔杖,像这样: 魔杖不仅能让瑶玲使用魔法,当瑶玲被攻击时还能提供2s的无敌状态: ...
- mstsc远程登录终端超出最大连接数的解决办法
1,.远程服务器有两个用户登录 2.第三个登录时提示:终端服务器超出了最大允许连接,这种情况怎么解决 A.通过运行命令来解决:运行输入mstsc /admin /v:IP:端口 敲回车来解决,这里的 ...
- [计算机网络-应用层] DNS:因特网的目录服务
我们知道有两种方式可以识别主机:通过主机名或者IP地址.人们喜欢便于记忆的主机名标识,而路由器则喜欢定长的.有着层次结构的IP地址.为了折中这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录 ...
- 使用WebClient类对网页下载源码,对文件下载保存及异步下载并报告下载进度
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAx4AAAI7CAIAAADtTtpYAAAgAElEQVR4nO3dX6xlV33Y8f3UJFUqHq
- hdu 3549 Flow Problem (网络最大流)
Flow Problem Time Limit: 5000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- Hyperledger Fabric 实战(十): Fabric node SDK 样例 - 投票DAPP
Fabric node SDK 样例 - 投票DAPP 参考 fabric-samples 下的 fabcar 加以实现 目录结构 . ├── app │ ├── controllers │ │ └─ ...