mysql 如何创建索引?

mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`column`)

mysql索引作用

在索引列上,除了有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。

mysql索引创建规则:

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,

则可以建立复合索引;否则考虑单字段索引;

C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

8、频繁进行数据操作的表,不要建立太多的索引;

9、删除无用的索引,避免对执行计划造成负面影响; 以上是一些普遍的建立索引时的判断依据。

一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。

因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,

索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,

一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

2.  创建索引

在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

1.ALTER TABLE

ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

代码如下

复制代码

ALTER TABLE table_name ADD INDEX index_name (column_list)

ALTER TABLE table_name ADD UNIQUE (column_list)

ALTER TABLE table_name ADD PRIMARY KEY (column_list)

其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名 index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

2.CREATE INDEX

CREATE INDEX可对表增加普通索引或UNIQUE索引。//unique只是在index前面加上unique就行了

代码如下

复制代码

CREATE INDEX index_name ON table_name (column_list)

CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

3.索引类型

在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

PRIMARY KEY索引和UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

下面的SQL语句对students表在sid上添加PRIMARY KEY索引。

代码如下

复制代码

ALTER TABLE students ADD PRIMARY KEY (sid)

4.  删除索引

可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

代码如下

复制代码

DROP INDEX index_name ON talbe_name

ALTER TABLE table_name DROP INDEX index_name

ALTER TABLE table_name DROP PRIMARY KEY

其中,前两条语句是等价的,删除掉table_name中的索引index_name。

第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

5.查看索引

代码如下

复制代码

mysql> show index from tblname;

mysql> show keys from tblname;

· Table

表的名称。

· Non_unique

如果索引不能包括重复词,则为0。如果可以,则为1。

· Key_name

索引的名称。

· Seq_in_index

索引中的列序列号,从1开始。

· Column_name

列名称。

· Collation

列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。

· Cardinality

索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。

· Sub_part

如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。

· Packed

指示关键字如何被压缩。如果没有被压缩,则为NULL。

· Null

如果列含有NULL,则含有YES。如果没有,则该列含有NO。

· Index_type

用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

· Comment

一些关于过引的常用语句

代码如下

复制代码

1.添加PRIMARY KEY(主键索引)

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)

mysql>ALTER TABLE `table_name` ADD UNIQUE (

`column`

)

3.添加INDEX(普通索引)

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

mysql中UNIQUE KEY和PRIMARY KEY有什么区别

1,Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求

2,一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY

3,主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。

alter table t add constraint uk_t_1 unique (a,b);

insert into t (a ,b ) values (null,1);    # 不能重复

insert into t (a ,b ) values (null,null);#可以重复

mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单相关推荐

  1. mysql 如何添加索引_MySQL如何创建一个好索引?创建索引的5条建议【宇哥带你玩转MySQL 索引篇(三)】...

    MySQL如何创建一个好索引?创建索引的5条建议 过滤效率高的放前面 对于一个多列索引,它的存储顺序是先按第一列进行比较,然后是第二列,第三列...这样.查询时,如果第一列能够排除的越多,那么后面列需 ...

  2. mysql按升序创建索引_MySQL 降序索引

    MySQL 降序索引 简介:在本教程中,您将了解MySQL降序索引以及如何利用它来提高查询性能. MySQL降序索引简介 降序索引是以降序存储键值的索引.在MySQL 8.0之前,您可以DESC在索引 ...

  3. mysql 数据删除 索引_MySQL操作之索引创建与删除

    大家好,我是anyux.本文介绍MySQL数据库的索引创建与删除. BTree树的索引分类 聚集索引,聚集索引一般是主键列辅助索引,辅助索引辅助聚集索引 聚集索引生成过程 MySQL会自动选择主键作为 ...

  4. mysql创建联合索引_mysql如何创建多个联合索引

    mysql创建多个联合索引的方法:可以使用CREATE INDEX或ALTER TABLE语句来创建.在创建联合索引时,应该仔细考虑列的顺序. MySQL中索引规则: 1.需要加索引的字段,要在whe ...

  5. mysql怎样创建索引_mysql如何创建索引?

    mysql创建索引的方法:1.使用CREATE TABLE语句配合INDEX或UNIQUE关键字在创建表的时候直接创建索引:2.使用ALTER TABLE语句来直接创建索引:3.使用CREATE IN ...

  6. 虚拟机mysql创建一个表_MySQL:创建、修改和删除表

    其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语 ...

  7. 如何用mysql创建股票数据库_mysql如何创建数据库

    数据库可以看作是一个专门存储数据对象的容器,这里的数据对象包括表.视图.触发器.存储过程等,其中表是最基本的数据对象.在 MySQL 数据库中创建数据对象之前,先要创建好数据库. 推荐课程:MySQL ...

  8. 如何用mysql创建股票数据库_mysql数据库创建表

    Mysql错误代码大全 1016错误:文件无法打开,使用后台修复或者使用phpmyadmin进行修复. 1044错误:数据库用户权限不足,请联系空间商解决 1045错误:数据库服务器/数据库用户名/数 ...

  9. mysql创建临时表 分页_Mysql 如何创建一张临时表

    mysql 利用 temporary 关键字就可以创建出一个临时表.创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每 ...

最新文章

  1. layui分页limit不显示_layui table分页 page为false时,limit问题
  2. java 删除指定目录_Java 删除目录 指定文件
  3. python isalnum函数_Python 字符串 (isdigit, isalnum,isnumeric)转
  4. 比较字符串是否相同,比较大小
  5. 前端把信息放在弹框里显示出来_jsp + js + 前端弹出框
  6. fishhook源码分析
  7. navicat 连接mysql is not allowed to connect to this mysql server
  8. linux 的截屏软件下载,Linux 截屏软件 Shutter
  9. 腾讯会议PPT演讲者模式
  10. 摄影曝光口诀_摄影中的“向右曝光”是什么以及为什么要这么做
  11. 图像处理在交通中的应用
  12. 表格标签-表格基本结构
  13. JS事件冒泡浏览器兼容
  14. Tips_linux
  15. IDEA Unable to import maven project: See logs for details具体解决方法
  16. c语言cout函数,c++中cin与cout 详解
  17. 小工具更新:车辆违章查询 v1.0.0.2
  18. SSH常见问题及其解决方法
  19. 科大讯飞往届生招聘_我从飞往西雅图的最后一波设计采访中学到的东西
  20. SQL数据库字段数据类型说明

热门文章

  1. Android 仿新版QQ的tab下面拖拽标记为已读的效果
  2. SQL 2014新特性- Delayed durability
  3. 开3389后不能登录的六种原因
  4. [IE技巧] IE Security Zone 的注册表设置
  5. linux qemu 源码编译
  6. docker 限制cpu使用率
  7. linux bash shell 常用快捷键
  8. SET-UID程序漏洞实验
  9. Linux2.6内核--对块IO层操作的讨论
  10. tarjan详解(转)