网站首页 > 文章中心 > 其它

mysql索引怎么创建的_mysql 索引下推

作者:小编 更新时间:2023-10-22 12:14:38 浏览量:153人看过

mysql创建索引的三种办法

第一段:CREATE INDEX方法

CREATE INDEX 索引名 ON 表名 (列名 [长度] [ ASC | DESC])

限制:只能增加普通索引INDEX和UNIQUE INDEX索引这两种;不能创建PRIMARY KEY索引

第二段:ALTER TABLE方法

ALTER TABLE 表名 ADD INDEX [索引名] (列名,...)

ALTER TABLE 表名 ADD UNIQUE [ INDEX | KEY] [索引名] (列名,...)

ALTER TABLE 表名 ADD PRIMARY KEY (列名,...)

ALTER TABLE 表名 ADD FOREIGN KEY [索引名] (列名,...)

第三段:CREATE TABLE时候指定

创建一般索引

CREATE TABLE tb_stu_info

(

id INT NOT NULL,

dept_id INT DEFAULT NULL,

age INT DEFAULT NULL,

height INT DEFAULT NULL,

INDEX(height)

);

创建唯一索引

UNIQUE INDEX(height)

创建主键(虽然ALTER TABLE也能创建,但主键一般都在创表时建立)

CREATE TABLE mytable(

ID INT NOT NULL,

PRIMARY KEY(ID)

mysql如何建立索引

我们可以通过查看索引的属性来判断创建索引的方法.

查看索引的语法格式如下:

SHOW INDEX FROM 表名 [ FROM 数据库名]

语法说明如下:

表名:指定需要查看索引的数据表名.

数据库名:指定需要查看索引的数据表所在的数据库,可省略.比如,SHOW INDEX FROM student FROM test; 语句表示查看 test 数据库中 student 数据表的索引.

示例

① row

Non_unique: 0

Key_name: height

Seq_in_index: 1

Column_name: height

Collation: A

Cardinality: 0

Sub_part: NULL

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

其中各主要参数说明如下:

参数 说明

Non_unique 表示该索引是否是唯一索引.若不是唯一索引,则该列的值为 1;若是唯一索引,则该列的值为 0.

Key_name 表示索引的名称.

Seq_in_index 表示该列在索引中的位置,如果索引是单列的,则该列的值为 1;如果索引是组合索引,则该列的值为每列在索引定义中的顺序.

Column_name 表示定义索引的列字段.

Collation 表示列以何种顺序存储在索引中.在 MySQL 中,升序显示值"A"(升序),若显示为 NULL,则表示无分类.

Cardinality 索引中唯一值数目的估计值.基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的.基数越大,当进行联合时,MySQL 使用该索引的机会就越大.

Sub_part 表示列中被编入索引的字符的数量.若列只是部分被编入索引,则该列的值为被编入索引的字符的数目;若整列被编入索引,则该列的值为 NULL.

Packed 指示关键字如何被压缩.若没有被压缩,值为 NULL.

Null 用于显示索引列中是否包含 NULL.若列含有 NULL,该列的值为 YES.若没有,则该列的值为 NO.

Index_type 显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE).

Comment 显示评注.

Mysql建立索引经验

在实际开发中使用数据库时,难免会遇到一些大表数据,对这些数据进行查询时,有时候SQL会查询得特别慢,这时候,有经验的老师傅会告诉你,你看一下哪几个字段查的多,加一个索引就好了.

那么,怎么合理地建立索引呢?这里分享一下我的一些经验,如有不妥之处,欢迎批评指正.

①.、不要盲目建立索引 , 先分析再创建

索引虽然能大幅度提升我们的查询性能,但也要知道,在你进行增删改时,索引树也要同样地进行维护.所以,索引不是越多越好,而是按需建立.最好是在一整块模块开发完成后,分析一下,去针对大多数的查询,建立联合索引.

这是说在一个慢sql里假如有五个where ,一个 order by ,那么我们的联合索引尽量覆盖到这五个查询条件,如果有必要,order by 也覆盖上 .

这个意思是,如果一张表里某个字段的值只有那么几个,那么你针对这个字段建立的索引其实没什么意义,比如说,一个性别字段就两种结果,你建了索引,排序也没什么意思(也就是索引里把男女给分开了)

所以说,索引尽量选择基数大的数据去建立,能最大化地利用索引

如果一个SQL里我们出现了范围查找,后边又跟着一个排序字段,那么我们优先给范围查找的字段设置索引,而不是优先排序.

不过慢SQL的优化,需要一步步去进行分析,可以先用explain查看SQL语句的分析结果,再针对结果去做相应的改进.explain的东西我们下次再讲.

PS:在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL.

mysql怎么创建索引

①添加PRIMARY KEY(主键索引)

mysqlALTER TABLE +table_name+ ADD PRIMARY KEY ( +column+ )

mysqlALTER TABLE +table_name+ ADD UNIQUE (

+column+

)

mysqlALTER TABLE +table_name+ ADD INDEX index_name ( +column+ )

mysqlALTER TABLE +table_name+ ADD FULLTEXT ( +column+)

下面是更加详细的方法

MySQL中可以使用alter table这个SQL语句来为表中的字段添加索引.

使用alter table语句来为表中的字段添加索引的基本语法是:

ALTER TABLE 表名 ADD INDEX (字段);

我们来尝试为test中t_name字段添加一个索引.

mysql alter table test add index(t_name);

Records: 0 Duplicates: 0 Warnings: 0

执行成功后,我们来看看结果.

mysql describe test;

+------------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

| t_id | int(11) | YES | | NULL | |

| t_birth | date | YES | | NULL | |

结果可以看出,t_name字段的Key这一栏由原来的空白变成了MUL.这个MUL是什么意思呢?简单解释一下:如果Key是MUL,那么该列的值可以重复,该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL.

以上就是土嘎嘎小编为大家整理的mysql索引怎么创建的相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章