1. 索引
索引是通过某种算法,构建出一个数据模型,用于快速找出在某个列中有一特定值的行,不使用索
引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的
时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而
不必查看所有数据,那么将会节省很大一部分时间。
按照实现的方式类分,主要有Hash索引和B+Tree索引
Hash索引:
B+Tree索引:
按照功能划分,索引分为单列索引(包括普通索引、唯一索引、主键索引)、组合索引、全文索
引、空间索引。
2.1 创建单列索引-普通索引
单列索引:一个索引只包含单个列,但一个表中可以有多个单列索引;
普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,
纯粹为了查询数据更快一点。
创建语法:
create database mydb5;
use mydb5;
-- 方式1-创建表的时候直接指定
create table student(
sid int primary key,
card_id varchar(20),
name varchar(20),
gender varchar(20),
age int,
birth date,
phone_num varchar(20),
score double,
index index_name(name) -- 给name列创建索引
);
-- 方式2-直接创建
-- create index indexname on tablename(columnname);
create index index_gender on student(gender);
-- 方式3-修改表结构(添加索引)
-- alter table tablename add index indexname(columnname)
alter table student add index index_age(age);
查看数据库中所有的索引:
-- select * from mysql.`innodb_index_stats` a where a.`database_name` = '数据库名’;
select * from mysql.`innodb_index_stats` a where a.`database_name` = 'mydb5';
查看表中的所有索引:
-- 方式一:
-- select * from mysql.`innodb_index_stats` a where a.`database_name` = '数据库名' and a.table_name like '%表名%’;
select * from mysql.`innodb_index_stats` a where a.`database_name` = 'mydb5' and a.table_name like '%student%';
--方式二
-- show index from table_name;
show index from student;
删除索引:
-- 语法:
-- drop index 索引名 on 表名
-- 或
-- alter table 表名 drop index 索引名
drop index index_gender on student
-- 或
alter ta