CREATE VIEW STUDENT_2001(SNO,SNAME,SGENDER,SBIRTH)
AS
SELECT S.SNO,SNAME,SGENDER,GRADE FROM S,SC,C
WHERE S.SNO = SC.SNO AND C.CNO = SC.CNO AND CNAME = '数据库' AND SBIRTH LIKE '2001%';
方法一
CREATE VIEW V_SPJ
AS
SELECT SNO,PNO,QTY FROM SPJ
WHERE JNO IN
(
SELECT JNO FROM J
WHERE JNAME = '三建'
);
方法二
CREATE VIEW V_SPJ
AS
SELECT SNO,PNO,QTY FROM SPJ,J
WHERE SPJ.JNO = J.JNO AND JNAME = '三建';
(1) 找出“三建”工程项目使用的各种零件代码及其数量。
SELECT PNO,SUM(QTY)
FROM V_SPJ
GROUP BY PNO;
(2) 找出供应商S1的供应情况。
SELECT * FROM V_SPJ
WHERE SNO = 'S1';
(1) 给视图V_SPJ中增加一条数据。
根据提示信息或无法显示或需要触发器,因此不需要实现
(2) 修改视图V_SPJ中的任意一条数据的供应数量。
UPDATE V_SPJ
SET QTY = 400
WHERE SNO = 'S3' AND PNO = 'P1';
(3) 删除视图V_SPJ中的任意一条数据。
DELETE
FROM V_SPJ
WHERE SNO = 'S3' AND PNO = 'P1';
(1) 在C表的CName属性上创建一个非唯一性的普通索引,索引名IX_CName。
CREATE INDEX IX_CName
ON C(CNAME);
(2) 在S表上创建一个名为IX_ngd的复合索引,该索引是针对sname, sgender, sdept属性集建立的升序索引。
CREATE INDEX IX_ngd
ON S(SNAME ASC,SGENDER ASC,SDEPT ASC);
(3) 删除C表的索引IX_CNo。
DROP INDEX IX_CNo ON C;
(4) 基于以上的索引(c表:cno的主键索引,cname的普通索引;S表:sno的主键索引,IX_nga复合索引),用explain得到的查询计划观察每个查询语句中索引的使用情况。
DROP INDEX IX_CNo ON C;
① explain select * from c;
未使用索引
② explain select * from c where cno = ‘1’;
使用主键索引
③ explain select * from c where cname=’数据库’ ;
使用主键索引
④ explain select * from c where cname like ‘%数据库%’;
未使用索引
⑤ explain select * from c where cname like ‘数据库%’;
使用普通索引
⑥ explain select * from s where sname =‘张立’ and sno=‘2001’;
使用主键索引
⑦ explain select * from s where sname =‘张立’ and sgender=‘男’ and sdept=‘IS’;
使用复合索引
⑧ explain select * from s where sname =‘张立’ and sgender=‘男’;
使用复合索引
⑨ explain select * from s where sname =‘张立’;
使用复合索引
⑩ explain select * from s where sgender =‘男’;
未使用索引
⑪ explain select * from s where sgender =‘男’ and sdept=‘IS’;
未使用索引
(1) 验证有索引和无索引的查询效率差异。
在age上创建一个索引,并按照如下语句进行查询
EXPLAIN SELECT *
FROM userinfo
WHERE age = 25;
(2) 验证单字段窄索引和多字段构成的宽索引的查询效率异,注意理解宽索引中的最左匹配原则。
首先在age上创建一个窄索引
然后查询
EXPLAIN SELECT username,age,gender,c_id
FROM userinfo
WHERE gender = 'm' AND age = 25 AND c_id = 1;
然后在age,gender,c_id创建一个宽索引
然后同上查询即可知道查询效率的差异。