常见导致服务器宕机的 SQL 问题
全表扫描未优化查询
当执行没有合适索引的查询时,数据库可能被迫扫描整个表。例如:
SELECT * FROM large_table WHERE unindexed_column = 'value';
这种查询在数据量大的表中会消耗大量 I/O 和 CPU 资源。
缺失索引的 JOIN 操作
多表连接时如果关联字段没有索引:
SELECT * FROM table_a JOIN table_b ON table_a.unindexed_id = table_b.unindexed_id;
会导致数据库执行昂贵的嵌套循环操作。
高资源消耗操作
大型事务处理
单事务中包含过多操作:
BEGIN;
INSERT INTO log_table SELECT * FROM huge_source_table;
UPDATE statistics SET count = count + 1000000;
COMMIT;
会长时间占用锁资源并填满日志文件。
不当的批量操作
没有分批次的大批量操作:
DELETE FROM session_table WHERE expire_time < NOW();
可能引发锁等待和事务日志膨胀。
查询设计缺陷
笛卡尔积查询
忘记指定连接条件:
SELECT * FROM users, orders;
会产生两表行数乘积的结果集。
递归查询失控
未设置终止条件的递归 CTE:
infinite_loop (
n
n infinite_loop
)
infinite_loop;

