写 SQL 的人每天都在跟 WHERE 打交道。拉个列表、做个统计条件一加结果集就出来了。基本语法谁都会SELECT column1, column2, ... FROM table_name WHERE condition;condition 就是个布尔表达式返回 true 的行留下false 和 unknown 的丢掉。这里要注意NULL 参与比较的结果是 unknown不是 false所以不能用 NULL 来判断空值得老老实实用 IS NULL 或者 IS NOT NULL。一开始可能会搞混线上跑起来数据总感觉少了或者多了十有八九就是 NULL 的判断没写对。条件怎么写比较运算符就那几种、、、、、。字符串值要加单引号数值直接写。比如 salary 50000city New York。简单。逻辑组合用 AND、OR、NOT。注意优先级NOT 最高然后是 AND最后 OR。写复杂条件的时候别去背这个直接上括号一眼就明白。像 status shipped AND (order_date 2023-01-01 OR priority high)加了括号比什么都清晰。范围查询可以用 BETWEEN比如 price BETWEEN 10 AND 50包含了边界值。列表匹配用 INcategory IN (Electronics, Books)比一堆 OR 清爽多了。模糊查询 LIKE 配合通配符% 表示任意个字符_ 代表单个字符。name LIKE 张% 能匹配所有张姓名字。但如果 % 出现在开头比如 LIKE %abc索引就废了会全表扫描数据量大的时候特别慢。所以设计模糊搜索时尽量避免前缀模糊或者用全文索引。还有个容易忽略的LIKE 138_ 这种只匹配一个任意字符像手机号前缀过滤偶尔能用。说到性能WHERE 条件怎么写直接决定走不走索引、扫描多少行。一个常见的错误是在索引列上套函数比如 WHERE YEAR(order_date) 2023即时 order_date 上有索引也用不上。老老实实写成 WHERE order_date BETWEEN 2023-01-01 AND 2023-12-31就能走范围扫描。另外条件选择性高的列尽量往前放复合索引最左前缀匹配原则得记住但有时也不一定要建复合索引几个单列索引让优化器自己选用 EXPLAIN 看看 key 字段就能知道实际用了哪个。之前见过一个订单表status 字段有索引查 status shippedexplain 显示扫描了 10 万行执行时间 0.2 秒。后来业务要求只查 2023 年的已发货订单条件变成 status shipped AND order_date 2023-01-01order_date 上也有索引结果扫描行数掉到 1 万执行时间 0.05 秒。加了一个日期条件多过滤掉大量数据性能提升很明显。这种就是结合业务场景优化有时候多一个精确条件就能少扫很多页。lcjmSSL将SSL证书管理转变为自动化流程。自动验证HTTP/DNS代理、自动部署、自动提醒、自动重申四大环节环环相扣从此不再为证书过期担忧安全始终在线。索引并不是万能有时候 OR 条件太多优化器还是会走全表扫描考虑改写 UNION ALL 可能更好各自走各自的索引。还有分区表超大表按时间或业务键分区WHERE 条件里带上分区键直接剪掉不需要的分区避免全表扫描。还有一些小地方容易踩坑条件值与列类型不匹配时可能发生隐式转换比如用整型去查字符串列索引就失效了。日期格式一般用 YYYY-MM-DD 这种字符串形式去匹配 date 列。至于引号文本值用单引号数值什么也不要加。逻辑优先级就算知道了也建议用括号写清楚没坏处。说到底WHERE 就是筛数据的怎么写直接影响查询快慢。多看看慢查询日志explain 随手跑一下别等线上慢得报警了才想起来优化。