MySQL进阶知识点

MySQL进阶知识点 COUNT (*) 和 COUNT (1) 几乎完全一样MySQL 都会优化效率基本无差别COUNT(1)作用给每一行赋值 1然后统计有多少行COUNT (字段) 不一样会忽略 NULL 值效率可能更低AS 别名用法 AS也可以省略空格代提别名只在当前 SQL 生效不修改原表WHERE 后面绝对不能用查询别名只能写原表真实字段别名是筛选完数据之后才生成的WHERE 看不到别名。GROUP BY、HAVING、ORDER BY 可以用别名WHERE分组之前过滤行数据HAVING分组之后过滤分组结果普通字段条件 → 写 WHERE聚合函数条件 → 写 HAVING两种条件都有 → 一起用普通索引作用最基础的索引仅用来加速查询没有任何唯一性限制。特点允许字段中出现重复值也可以为NULL只提升查询效率不做任何数据校验适用场景需要频繁按某个字段查询、排序、分组但不要求字段值唯一。唯一索引作用在 “加速查询” 的基础上强制字段的值不能重复除了 NULL。特点字段中不能有重复值但可以有多个NULLMySQL 允许同时具备索引的查询加速和唯一性约束功能适用场景手机号、身份证号、用户名等 “业务上必须唯一” 的字段。联合索引作用在多个字段上创建一个索引相当于给字段组合建立 “联合目录”。特点遵循最左匹配原则查询条件里必须包含最左边的字段索引才会生效。适用场景经常需要同时按多个字段进行查询、排序的情况。主键索引是一种特殊的唯一索引它既不允许重复也不允许 NULL 值而且每个表只能有一个主键索引数据库设计范式建表规范第一范式1NF列不可再分比如不能把姓名和手机号存在同一个字段里第二范式2NF非主键字段必须完全依赖主键消除部分依赖比如订单表不能把商品名称存在订单表应关联商品表 ID第三范式3NF非主键字段不能传递依赖消除传递依赖比如员工表的部门名称应关联部门表 ID而不是直接存部门名称视图View本质虚拟表由查询语句定义不存储真实数据作用简化复杂查询、权限控制只给用户看部分字段视图优点简化复杂 SQL 多表联表、分组统计写进视图以后直接查视图数据安全 隐藏敏感字段手机号、工资只开放部分字段统一查询格式 所有人统一用视图查询规范一致减少重复代码 复杂查询只写一次视图缺点无实际数据性能略差 每次查询都要执行原 SQL不能频繁修改原表结构 原表改字段视图容易失效带聚合函数的视图不能增删改视图能不能增删改简单视图无聚合、无分组、无去重 可以增删改会直接改动原表数据复杂视图GROUP BY、DISTINCT、聚合函数 不能增删改只能查询