SQL中遇到 like'%xx%'怎么优化

    xiaoxiao2026-04-25  13

    技巧 如果你经常需要一个以通配符开头的查询,常用的方法是在数据库中保存需要查询的值的反序值。例如,假设你想要找所有以.com 结尾的电子邮件地址,当搜索 email Like '%.com' 时 MySQL不能使用索引;而搜索 reverse_email LIKE REVERSE('%.com')就可以使用定义在 reverse_email 列上的索引。 REVERSE(str)     返回颠倒字符顺序的字符串str。     mysql> select REVERSE('abc');             -> 'cba'     该函数对多字节可靠的。 key_len: 4 // INT NOT NULL key_len: 5 // INT NULL key_len: 30 // CHAR(30) NOT NULL key_len: 32 // VARCHAR(30) NOT NULL key_len: 92 // VARCHAR(30) NULL CHARSET=utf8 mysql> EXPLAIN SELECT p.* FROM parent p WHERE p.id NOT IN (SELECT c.parent_id FROM childc)\G ********************* 1. row *********************** id: 1 select_type: PRIMARY table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 160 Extra: Using where ********************* 2. row *********************** id: 2 select_type: DEPENDENT SUBQUERY table: c type: index_subquery possible_keys: parent_id key: parent_id key_len: 4 ref: func rows: 1 Extra: Using index 2 rows in set (0.00 sec) mysql> EXPLAIN SELECT p.* -> FROM parent p -> LEFT JOIN child c ON p.id = c.parent_id -> WHERE c.child_id IS NULL\G ********************* 1. row *********************** id: 1 select_type: SIMPLE table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 160 Extra: ********************* 2. row *********************** id: 1 select_type: SIMPLE table: c type: ref possible_keys: parent_id key: parent_id key_len: 4 ref: test.p.id rows: 1 Extra: Using where; Using index; Not exists 2 rows in set (0.00 sec) mysql> EXPLAIN SELECT p.* -> FROM parent p -> WHERE NOT EXISTS -> SELECT parent_id FROM child c WHERE c.parent_id = p.id)\G ********************* 1. row *********************** id: 1 select_type: PRIMARY table: p type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 160 Extra: Using where ********************* 2. row *********************** id: 2 select_type: DEPENDENT SUBQUERY table: c type: ref possible_keys: parent_id key: parent_id key_len: 4 ref: test.p.id rows: 1 Extra: Using index 2 rows in set (0.00 sec) 相关资源:SQL性能优化
    最新回复(0)