一、前提信息

1.数据库版本

mysql> select version(),user();
+------------+----------------+
| version() | user() |
+------------+----------------+
| 5.5.32-log | root@localhost |
+------------+----------------+
1 row in set (0.00 sec)

2.创建索引的帮助信息

mysql> help create index;

二、操作语句

1.添加索引

(1) 建表时添加索引

create table zwq.stu2(
id int(4) not null auto_increment,
name char(20) not null,
age tinyint not null default '',
dept varchar(16) default null,
primary key(id),
key index_name(name)
) charset=gbk;

(2)指定列添加主键

alter table stu add primary key(id);

(3)指定列上添加索引

-- 在name列上添加名为index_name的索引
alter table zwq.stu2 add index index_name(name);

(4)在指定的库、表、列、字符长度上创建索引

-- 数据库zwq 表 stu2 字段dept 字符长度8
create index index_dept on zwq.stu2(dept(8));

(5)创建哈希索引

 create index index_dept USING HASH on zwq.stu2(dept(8)) comment '哈希索引' ;

(6)创建组合索引

create index index_name_dept on zwq.stu2(name(8),dept(10));

注意:按条件列查询数据时,联合索引是前缀生效特性的 index(a,b,c) 仅 a,ab,abc三个查询条件可以使用到索引;b、c、bc、ac则无法使用索引

(7)创建唯一索引

mysql> create unique index uniq_index_email on zwq.stu2(email);
mysql> show columns from zwq.stu2;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| age | tinyint(4) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
| email | varchar(30) | YES | UNI | NULL | |
+-------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

2.删除普通索引

-- 方式1
alter table zwq.stu2 drop index index_name;
-- 方式2
drop index index_dept on zwq.stu2;

3.查看索引

mysql> show index from zwq.stu2;
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
| stu2 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE |
| stu2 | 1 | index_dept | 1 | dept | A | 0 | 8 | NULL | YES | BTREE |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+
2 rows in set (0.03 sec)

注意:使用唯一索引且存在自增列的表,当因为唯一列重复而插入记录失败时,自增列依旧自增。

三、索引使用的基本条件

索引可以加快查询速度,但索引不仅占用存储空间、更新数据库数据时还需要维护索引数据,因此,索引是把双刃剑,并不是越多越好。几百行的数据不要建索引;更新频繁、读取少的表也不要建索引。

创建索引一定要在where语句的条件列,而不是select的选择数据的列,尽量选择唯一值的列上建索引。

四、索引失效的场景

or like null 字符集 多表 组合索引

MySQL index 增删改的更多相关文章

  1. koa+mysql实现增删改查-全栈之路(001)

    Date: 2020-4-23 以前很少写文章,从今天开始我要挑战一下自己,连续输出100篇技术类文章.这100篇文章我尽量以实战案例为主. 如果你觉得本文还不错,记得关注或者给个 star,你们的赞 ...

  2. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  3. node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  4. MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句)一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码)二.SQL语句:    数据定义语言DDL  用来定义数据库.表.列,关 ...

  5. python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例 # 数据库配置文件 # cat gconf.py #encoding=utf-8 import json # json里面的字典不能用单引 ...

  6. Asp.Net操作MySql数据库增删改查

    Asp.Net操作MySql数据库增删改查,话不多说直接步入正题.git源码地址:https://git.oschina.net/gxiaopan/NetMySql.git  1.安装MySQL数据库 ...

  7. Mysql 的 增删改查

    mysql的增删改查 1:新建数据库 create database 数据库名 [其他选项]; 2:新建数据表 create table students ( id int unsigned not ...

  8. MySQL之增删改查之

    MySQL之增删改查   前言:以下是MySQL最基本的增删改查语句,很多IT工作者都必须要会的命令,也是IT行业面试最常考的知识点,由于是入门级基础命令,所有所有操作都建立在单表上,未涉及多表操作. ...

  9. MySql之增删改查 · YbWork's Studio

    前提:在进行"增删改查"的操作之前,先建立一个包含数据表student的数据库(具体操作可以见MySQL之最基本命令): 1."增"--添加数据 1.1 为表中 ...

随机推荐

  1. Numpy入门 - 生成数组

    今天是Numpy入门系列教程第一讲,首先是安装Numpy: $ pip install numpy numpy是高性能科学计算和数据分析的基础包,本节主要介绍生成连续二维数组.随机二维数组和自定义二维 ...

  2. 当使用javac编译源文件时,如何查找import导入的类

    当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转移单元).每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件名称一致.每个 ...

  3. IntelliJ IDEA(三) :常用快捷键

    说IDEA对新手来说难,可能其中一个原因就是快捷键组合多而且复杂但是它也很全,基本所有功能都可以通过快捷键来完成,可以这么说,如果你掌握了所有IDEA的快捷键使用,那么你完全可以丢掉鼠标,而且不影响开 ...

  4. ubuntu指令记录

    记录一些指令,便于查看使用. 1.sudo -以其他身份运行命令,预设身份为root. 2.ctrl+alt+T打开终端(命令行窗口) 3.如何判断linux系统是32位还是64位,指令:getcon ...

  5. HDU 1754 线段树 单点跟新 HDU 1166 敌兵布阵 线段树 区间求和

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. phpstorm 2017.2激活

    激活 试用期的用户可在 PhpStorm菜单栏–>Help–>Register打开 选择License server,输入以下任意一个地址: http://idea.imsxm.com/  ...

  7. NOIP2017普及组初赛解析

    首发于订阅号 嗨编程,这是一个以嗨为目标的编程订阅号(仅仅是目标而已),扫码可关注,不定期更.

  8. setTimeout和setInterval和单线程

    我们知道,js是单线程执行的(单线程j就是说在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行).所以其实setTimeout和setInterval所谓的"异 ...

  9. let 和 const

    let命令 1.let命令只在所在的代码快内有效 { let a = 'hello world' console.log(a) //hello world } console.log(a) //Unc ...

  10. HTTP响应状态码含义参考

    1xx:信息 100 Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求.101 Switching Protocols服务器转换协议:服务器将遵从客 ...