1.1 什么是索引?
SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间
下面举两个简单的例子:
图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某作者的,不知道书名怎么办?图书管理员在写一个目录,某某作者的书分别在第几排,第几排,这就是一个非聚集索引
字典的例子:字典前面的目录,可以按照拼音和部首去查询,我们想查询一个字,只需要根据拼音或者部首去查询,就可以快速的定位到这个汉字了,这个就是索引的好处,拼音查询法就是聚集索引,部首查询就是一个非聚集索引.
看了上面的例子,下面的一句话大家就很容易理解了:聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。就像字段,聚集索引是连续的,a后面肯定是b,非聚集索引就不连续了,就像图书馆的某个作者的书,有可能在第1个货架上和第10个货架上。还有一个小知识点就是:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。
CREATE DATABASE IF NOT EXISTS info DEFAULT CHARSET utf8;
USE info;
#建员工表
CREATE TABLE IF NOT EXISTS emp(emp_id INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(20),
salary INT,
dept_id INT,
manager_id INT
);
DROP TABLE emp;
#直接指定索引
CREATE INDEX index_emp_name ON emp(emp_name);
SELECT * FROM emp WHERE emp_name="liu";
#修改表时添加索引
ALTER TABLE emp ADD INDEX index_salary (salary);
#创建表时添加索引
CREATE TABLE article(id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(20) COMMENT '标题',
comtent VARCHAR(100) COMMENT '内容',
dt DATE,
INDEX index_title (title)
);
#删除索引
DROP INDEX index_salary ON emp;
DROP INDEX index_emp_name ON emp;
DROP INDEX index_title ON article;
#创建唯一索引unique
#在 index前面加unique:保证索引列的值必须唯一,但允许有多个空值;
CREATE UNIQUE INDEX index_emp_name ON emp(emp_name);
SELECT * FROM emp WHERE emp_name="liu";
ALTER TABLE emp ADD UNIQUE INDEX index_salary (salary);
CREATE TABLE article(id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(20) COMMENT '标题',
comtent VARCHAR(100) COMMENT '内容',
dt DATE,
UNIQUE INDEX index_title (title)
);
#创建组合索引:1,2,3
CREATE INDEX index_title_content ON article(title,comtent);
SELECT * FROM article WHERE title='冬奥会' AND comtent='金牌数量';