9索引与视图

发布时间:2026/5/21 7:18:41

9索引与视图 MySQL 第6章 索引与视图教学博客扩充版适合初学者 包含工作高频知识点本章核心索引加速查询、视图简化开发提高安全是MySQL最常用、面试/工作必问的两大核心对象。一、索引Index—— 数据库的“目录”1.1 索引是什么通俗讲索引就是数据表的目录像书的目录一样没有索引逐行扫描慢数据量大卡死有索引直接定位快秒查一句话索引加速查询1.2 索引分类工作必懂5种普通索引INDEX/KEY最常用仅加速唯一索引UNIQUE值不能重复主键索引PRIMARY KEY唯一非空自动索引全文索引FULLTEXT大文本模糊搜索文章、内容空间索引SPATIAL地理坐标经纬度1.3 单列索引 vs 复合索引工作高频单列索引一个字段建索引复合索引多个字段一起建索引复合索引规则面试必考最左匹配原则复合索引(a,b,c)查询条件必须包含最左边a索引才会生效。1.4 索引优缺点工作必背优点查询超快缺点占用磁盘空间增删改INSERT/UPDATE/DELETE变慢索引越多写越慢工作建议查询频繁的字段才建索引不要乱建、不要全建索引泛滥数据库变慢二、索引的创建、查看、删除上课工作直接用2.1 创建索引3种方式方式1建表时直接创建最常用CREATETABLEemp(empnoINTPRIMARYKEY,-- 主键索引enameVARCHAR(20)UNIQUE,-- 唯一索引jobVARCHAR(20),INDEXidx_job(job)-- 普通索引);方式2已有表用 CREATE INDEX-- 普通索引CREATEINDEXidx_enameONemp(ename);-- 唯一索引CREATEUNIQUEINDEXidx_deptnoONemp(deptno);-- 复合索引CREATEINDEXidx_dept_salONemp(deptno,sal);方式3ALTER TABLE 添加索引ALTERTABLEempADDINDEXidx_job(job);2.2 查看索引-- 查看所有索引SHOWINDEXFROMemp;-- 查看表结构含索引SHOWCREATETABLEemp;-- 分析SQL是否走索引工作神器EXPLAINSELECT*FROMempWHEREename张三;工作提示EXPLAIN是调优神器看key字段有值走索引NULL没走2.3 删除索引-- 方式1DROPINDEXidx_jobONemp;-- 方式2ALTERTABLEempDROPINDEXidx_job;三、视图View—— 虚拟表、安全又省事3.1 视图是什么通俗讲视图虚拟表不存真实数据只存查询语句。数据来自真实表基本表视图只能读/改真实表删视图真实表没事3.2 视图三大好处工作天天用简化复杂查询多表关联一次写好以后直接查视图安全控制给用户只看指定字段隐藏手机号、密码解耦表结构变了视图不改程序不用改3.3 创建视图单表/多表单表视图CREATEVIEWview_empASSELECTempno,ename,jobFROMemp;多表视图工作最常用员工部门CREATEVIEWview_emp_deptASSELECTe.empno,e.ename,d.dnameFROMemp eJOINdept dONe.deptnod.deptno;3.4 查看视图DESCview_emp;SHOWCREATEVIEWview_emp;3.5 修改视图CREATEORREPLACEVIEWview_empASSELECTempno,ename,job,salFROMemp;3.6 删除视图DROPVIEWview_emp;3.7 通过视图操作数据工作常用视图本质是操作真实表-- 插入INSERTINTOview_emp(empno,ename)VALUES(1001,小明);-- 修改UPDATEview_empSETename小红WHEREempno1001;-- 删除DELETEFROMview_empWHEREempno1001;注意视图不能包含聚合函数、GROUP BY、DISTINCT、JOIN部分→ 这类视图不能增删改只能查四、工作高频总结面试/开发必考索引工作经验主键一定建索引自动查询条件、WHERE、JOIN、ORDER BY 字段优先建索引复合索引遵守最左匹配不要在性别、状态这种低基数字段建索引没用索引不是越多越好增删改会变慢视图工作经验视图用于权限隔离、简化报表视图不存数据真实表变视图自动变复杂多表查询封装成视图开发效率翻倍视图不能替代表不能建索引MySQL限制五、上课可直接运行 SQL索引视图完整版-- 1. 创建部门表CREATETABLEdept(deptnoINTPRIMARYKEY,dnameVARCHAR(20));INSERTINTOdeptVALUES(10,总裁办),(20,研究院);-- 2. 创建员工表带索引CREATETABLEemp(empnoINTPRIMARYKEY,enameVARCHAR(20)UNIQUE,jobVARCHAR(20),salDECIMAL(7,2),deptnoINT,INDEXidx_sal(sal),INDEXidx_deptno_sal(deptno,sal));INSERTINTOempVALUES(9901,张三,经理,5000,10),(9902,李四,开发,4000,20);-- 3. 查看索引SHOWINDEXFROMemp;-- 4. 创建视图员工部门CREATEVIEWview_emp_deptASSELECTe.empno,e.ename,d.dnameFROMemp eJOINdept dONe.deptnod.deptno;-- 5. 查询视图SELECT*FROMview_emp_dept;本章一句话总结索引加速查询、慢写视图虚拟表、简化安全

相关新闻