天天看点

SQL MySQL SQL Server 索引(index)

-- 创建表
CREATE TABLE t51(
	emp_id int IDENTITY(1,1),
	emp_name VARCHAR(50) NOT NULL DEFAULT '',
	emp_age SMALLINT NOT NULl DEFAULT 0,
	emp_address VARCHAR(100) NOT NULL DEFAULT '',
	phone char(11) NOT NULL DEFAUlT ''
)

-- 添加数据
INSERT INTO t51(emp_name, emp_age, emp_address) VALUES('张三', 20, '广东');
INSERT INTO t51 VALUES('李四', 30, '广东', 16606652036);

-- 创建索引 加快查询速度
-- emp_id_index 索引名称 创建索引后,只对创建了索引的列有效, 
-- 以下只对SELECT * FROM t51 WHERE emp_id = xxx 有效,因为创建的索引列是emp_id
CREATE INDEX emp_id_index ON t51(emp_id);

SELECT * FROM t51 WHERE emp_id = 1;

-- 缺点: 如果对表进行dml(修改,删除,添加) 会对索引进行维护,对速度有影响
           
------------------------演示索引----------------------
DROP TABLE IF EXISTS t52;
CREATE TABLE t52(
	id INT,
	name VARCHAR(32)
);

-- 查询表是否有索引, SQL Server不适用, 适用于MySQL
SHOW INDEXES FROM t52

-- 添加索引
-- 添加唯一索引
CREATE UNIQUE INDEX id_index ON t52(id); -- 创建唯一索引

-- 添加普通索引
CREATE INDEX id_index ON t52(id); -- 创建普通索引

-- 如何选择
-- 1.如果某列的值,是不会重读的,则优先使用UNIQUE索引,否则使用普通索引

-- 添加普通索引方式2
-- SQL Server不适用, 适用于MySQL
ALTER TABLE t52 ADD INDEX id_index(id);

-- 添加主键索引
-- MySQL直接执行第二条语句,
-- SQL Server要添加的字段如果允许为空,则先修改为不允许为空,在添加主键索引
ALTER TABLE t52 ALTER COLUMN id int NOT NULl;
ALTER TABLE t52 ADD PRIMARY KEY(id);

-- 删除索引
-- 删除 id_index 索引
DROP INDEX id_index ON t52;

-- 删除主键索引
-- SQL Server不适用, 适用于MySQL
ALTER TABLE t52 DROP PRIMARY KEY;
           
SQL MySQL SQL Server 索引(index)