数据库索引使用

2024-01-08 14:55:47
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'emp_pay')
DROP TABLE emp_pay

IF EXISTS (SELECT name FROM sys.indexes
WHERE name = 'employeeID_ind')
DROP INDEX emp_pay.employeeID_ind

CREATE TABLE emp_pay
(
    employeeID int NOT NULL,
    base_pay money NOT NULL,
    commission decimal(2, 2) NOT NULL
)
INSERT emp_pay VALUES (1, 500, .10)
INSERT emp_pay VALUES (2, 1000, .05)
INSERT emp_pay VALUES (6, 800, .07)
INSERT emp_pay VALUES (5, 1500, .03)
INSERT emp_pay VALUES (9, 750, .06)
无索引查找
SELECT * FROM emp_pay where employeeID=5

创建索引
CREATE UNIQUE CLUSTERED INDEX employeeID_ind
ON emp_pay (employeeID)
create unique clustered index employeeID_ind

当插入的数据在employeeID字段出现重复时会报错。假如我们在创建索引之前数据字段出现重复,那么就不能创建唯一索引。

删除索引
删除在前面创建的索引employeeID_ind
DROP INDEX employeeID_ind ON emp_pay;   

格式:CREATE [unique|fulltext|spatial] INDEX 索引的名称 ON 表名(表名的哪一列的列名1,列名2…)
例:为employee表的ename列上建立一个升序普通索引ename_index。
CREATE INDEX ename_index ON employee(ename ASC);

例:在employee表的ename列上建立一个唯一性索引ename_uni_index。
CREATE UNIQUE INDEX ename_uni_index ON employee(ename);

例:在employee表的empno和ename列上建立一个复合索引empno_ename_index。
CREATE INDEX empno_ename_index ON employee(empno,ename);

可以使用show index from table_name语句查看表中已创建的索引
SHOW INDEX FROM employee;

创建表时创建索引
例:创建dept_index表时
为dname字段建立一个唯一性索引dname_index,
为loc字段的前3个字符创建一个前缀索引loc_index。
CREATE TABLE IF NOT EXISTS dept_index (
    deptno INT(2),
    dname VARCHAR(14),
    loc VARCHAR(13),
    PRIMARY KEY (deptno),
    UNIQUE INDEX dname_index(dname),
    INDEX loc_index(loc(3))
);
修改表时创建索引
例:在dept_index表上建立deptno和dname的复合索引。
ALTER TABLE dept_index ADD INDEX deptno_dname_index(deptno, dname);

查看dept_index表已创建的索引
Show index from dept_index;

当给表创建unique约束时,MySQL会自动创建唯一索引。
创建唯一索引时,应保证创建索引的列不包括重复的数据,并且不要有两个及以上的空值(null)。
因为创建索引时将两个空值也视为重复的数据,如果有这种数据,必须先将其删除,否则索引不能被成功创建。
也就是说唯一索引只允许有一个空值。

文章来源:https://blog.csdn.net/u014657752/article/details/135455072
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。