RSS
菜单
社区成员个人主页
阿成员
DEV CN / 成员主页

阿青 · 社区话题账号

查看阿青 · 社区话题账号发布的技术文章、关注圈子与公开讨论。

0技术文章4关注圈子466圈内发布1关注者
COMMUNITY POSTS

交流圈发布内容

作者在不同技术圈子中的观点与讨论

1
# MySQL

MySQL COUNT(*)、COUNT(1)、COUNT(列) 有什么区别?

COUNT(*) :统计行数(含 NULL),InnoDB 下逐行计数(无专门计数器),与 COUNT(1) 等价(都按行数算,不取值);COUNT(1):同样统计行数,效果等同 COUNT(*);COUNT(列):只统计该列非 NULL 的行数(NULL 不计)。性能:三者优化器基本等价(都扫描最小索引),COUNT(列) 若有覆盖索引可能更快;大表 COUNT(*) 仍慢(全表/全索引扫描),优化:计数器表、EXPLAIN 用估算、…

2
# MySQL

MySQL UNION 和 UNION ALL 有什么区别?

UNION:合并两个查询结果并去重(会额外排序/去重,有临时表开销);UNION ALL:直接合并不去重(快)。性能:UNION ALL 远快于 UNION(去重成本高),结果无重复时用 UNION ALL。语义:两边列数必须一致;列名取第一个查询;ORDER BY/LIMIT 作用于整体(或各子查询加括号各自限制)。应用:多表合并查询(订单表分区)、分页统计总数、FULL JOIN 模拟(LEFT JOIN UNION ALL RIG…

4
# MySQL

MySQL 子查询和 JOIN 怎么选?

子查询:嵌套 SELECT,可读性好但老版本优化差(逐行执行、临时表);JOIN:表连接,优化器选择更优执行计划(索引连接、hash join)。经验:① 大部分场景 JOIN 或改写为 JOIN 性能更好(尤其 IN 子查询);② 8.0 子查询优化增强(semi-join、物化、lateral),很多场景已自动优化;③ EXISTS 与 IN:小表驱动大表时 EXISTS 适合相关子查询;④ 明确场景:聚合结果当过滤条件用子查询(W…

5
# MySQL

MySQL JOIN 有哪几种?INNER/LEFT/RIGHT/FULL 区别?

INNER JOIN:内连接,两表都匹配的行(交集);LEFT JOIN:左连接,左表全部行 + 右表匹配行(不匹配补 NULL);RIGHT JOIN:右连接,右表全部 + 左表匹配;FULL OUTER JOIN:全外连接,两边全部(MySQL 不支持,用 LEFT + UNION + RIGHT 模拟);CROSS JOIN:笛卡尔积(少用)。实现:Nested Loop Join(嵌套循环)、Hash Join(8.0.18+,…

6
# MySQL

MySQL GROUP BY 和 HAVING 怎么用?

GROUP BY:按列分组,常配合聚合函数(COUNT/SUM/AVG/MAX/MIN)统计每组;可多列分组、按表达式分组。HAVING:对分组后的结果过滤(在 GROUP BY 之后执行),条件可含聚合函数(HAVING COUNT(*) > 10);WHERE 在分组前过滤行(不能含聚合函数)。顺序:WHERE → GROUP BY → HAVING → ORDER BY → LIMIT。ONLY_FULL_GROUP_BY(默认开…

7
# MySQL

MySQL 的 SQL 注入是什么?怎么防御?

SQL 注入:攻击者把恶意 SQL 片段拼进用户输入,改变原 SQL 语义,如 ' OR '1'='1 绕过登录、'; DROP TABLE ...' 删表。原理:动态拼接 SQL 未参数化。防御:① 参数化查询(预处理语句):SELECT * FROM t WHERE id=?(Python psycopg2/pymysql 用 %s、Java PreparedStatement)——值不会被当 SQL 执行,最有效;② 输入校验/白…

9
# MySQL

MySQL EXPLAIN 怎么看执行计划?关键字段有哪些?

EXPLAIN SELECT ... 输出执行计划,关键字段:① id:执行顺序(大者先,相同则从上到下);② select_type:SIMPLE/PRIMARY/SUBQUERY/DERIVED/UNION;③ table:访问的表(含别名);④ type(重点):访问类型,性能排序 system > const > eq_ref > ref > range > index > ALL(ALL 全表扫描要避免,index 全索引扫描…

10
# MySQL

MySQL 前缀索引是什么?cardinality 怎么理解?

前缀索引:对长字符串列只取前 N 字符建索引(KEY idx(name(10))),节省索引空间、加快写入;代价:区分度可能下降(不同值前缀相同)、ORDER BY 无法用索引排序、覆盖索引失效。cardinality:索引列去重值的数量(基数),基数越高区分度越好;查询优化器用它估算选择性与是否走索引;ANALYZE TABLE 更新统计信息。设计:前缀长度取使区分度接近全列的长度(SELECT COUNT(DISTINCT LEFT…