如何在SQL创建索引

我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引。假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name、Employee_Age 和Employee_Address。假设表Employee 有上千行数据。

现在假设我们要从这个表中查找出所有名字是‘Jesus’的雇员信息。我们决定使用下面的查询语句:

SELECT * FROM Employee 
WHERE Employee_Name = 'Jesus'

一旦我们运行这个查询,在查找名字为Jesus的雇员的过程中,究竟会发生什么?数据库不得不Employee表中的每一行并确定雇员的名字(Employee_Name)是否为 ‘Jesus’。由于我们想要得到每一个名字为Jesus的雇员信息,在查询到第一个符合条件的行后,不能停止查询,因为可能还有其他符合条件的行。所以,必须一行一行的查找直到最后一行-这就意味数据库不得不检查上千行数据才能找到所以名字为Jesus的雇员。这就是所谓的全表扫描

如何在使用SQL创建索引:

之前的例子中,在Employee_Name列上创建索引的SQL如下:

CREATE INDEX name_index
ON Employee (Employee_Name)

如何创建联合索引

我们可以在雇员表上创建两个列的联合索引,SQL如下:

CREATE INDEX name_index
ON Employee (Employee_Name, Employee_Age)

主键索引
主键索引,简称主键,原文是PRIMARY KEY,由一个或多个列组成,用于唯一性标识数据表中的某一条记录。一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。

比如 :
学生表(学号,姓名,性别,班级) 
其中每个学生的学号是唯一的,学号就是一个主键 
课程表(课程编号,课程名,学分) 
其中课程编号是唯一的,课程编号就是一个主键 
成绩表(学号,课程号,成绩) 
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键

在MySQL中,InnoDB数据表的主键设计我们通常遵循几个原则:

1、采用一个没有业务用途的自增属性列作为主键;
2、主键字段值总是不更新,只有新增或者删除两种操作;
3、不选择会动态更新的类型,比如当前时间戳等。

 

创建表的时候同时为表创建主键索引和普通索引:例子如下    

    

创建表的时候同时为表创建主键索引和普通索引:例子如下    

    mysql> create table student( 
             id int(4) not null auto_increment, 
             name char(20) not null, 
             age tinyint(2) not null default'0', 
             dept varchar(16) default null, 
             primary key(id),
             key index_name(name) );
          Query OK, 0 rows affected (0.00 sec)

    注意:

      primary key(id)  <-主键

      KEY index_name(name) <-name字段普通索引

      只有int类型且为primary key才可以使用auto_increment

    注意:

      primary key(id)  <-主键

      KEY index_name(name) <-name字段普通索引

      只有int类型且为primary key才可以使用auto_increment

 

 

 

 

 

 

 

 

 

 

 

    原文作者:菜鸟要努力变强
    原文地址: https://blog.csdn.net/weixin_39315827/article/details/102825629
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞