mysql如何优化or条件查询

上周我尝试优化 OR 查询,结果非常好。

有两个核心思想。
首先,分离OR条件。
其次,使用 UNION 代替。

我们先来说说分裂。
例如,2 02 3 年 1 2 月的用户表。
原始查询是: sql SELECT FROM users WHERE name='Alice' OR email='alice@example.com';
这不起作用。
因为姓名和电子邮件没有索引。
直接执行会扫描整个表。

优化后: sql 从用户中选择 WHERE name='Alice' UNION SELECT FROM users WHERE email='alice@example.com';
分成两个子查询。
任何子查询都可以使用索引。
使用 UNION 合并结果。
解释一下让我们看看。
ref 或索引显示类型。
这是正确的。

我们来谈谈综合指数。
如果有多个OR条件字段。
例如: sql SELECT FROM users WHERE status=1 OR create_at>'2 02 4 -01 -01 ';
这种类型。
可以创建复合索引。
sql ALTER TABLE users ADD INDEX idx_status_created(status, create_at);
使用状态字段进行查询。
你可以去索引。
无需退回表格。
更有效。

最后,解释一下。
必须使用。
例如: sql EXPLAIN SELECT FROM user WHERE name='Alice' OR email='alice@example.com';
查看类型是否为 ALL。
查看键是否使用索引。
查看 Extra 是否使用链接。

注意: 1 .索引合并需要更高的版本。
仅 MySQL 5 .0+ 支持。
并非所有场景都有效。
例如,等效查询将起作用。

2 复合索引必须按顺序建立。
最左边的前缀规则。
例如,状态位于前台。
只能通过查询来使用。

3 不要随意添加索引。
添加太多影响写作。
称重。

4 跳过功能操作。
例如:喜欢“%Alice%” 这种类型。
索引将失效。
它不能用于 OR 条件。

上次我的朋友尝试过这个方法。
解决了OR查询慢的问题。
节省大量内存。
没关系。
由你决定。

MySQL中OR函数实现条件搜索mysql中or函数

是的,这就是问题所在。
MySQL中使用OR来扩展搜索条件。

我上周刚刚编辑了一篇。
检查两张表,看年龄是1 8 岁还是2 6 岁,直接写:
SELECT name,age FROM table1 WHEREage = 1 8 ORage = 2 6 UNION 从表 2 中选择姓名、年龄,其中年龄 = 1 8 或年龄 = 2 6 ;
情况更复杂。
例如,要搜索 1 8 至 2 0 岁的男性和 2 5 至 3 0 岁的女性,请使用 IN 和 OR:
SELECT 姓名、年龄、性别 FROM table3 WHERE (age BETWEEN 1 8 AND 2 0 OR Age BETWEEN 2 5 AND 3 0) AND (gender = 'M' OR sex = 'F');
另一个示例,要查找男性姓名中包含 a 或女性姓名中包含 e 的姓名,请使用 CASE 和 OR:
SELECT name, sex FROM table4 WHERE (gender = 'M' AND name LIKE '%a%') OR (gender = 'F' AND name LIKE '%e%');
请记住,灵活使用 OR 可以使条件搜索变得更容易。
你自己看看,还有其他可能的用途吗?