在MySQL中,使用 (双头模糊匹配)会破坏B+树索引的最左前缀原则,从而导致索引失效、触发全表扫描。如果数据量较大,这会引起严重的性能问题。 针对“用户名”或“手机号”的模糊搜索需求,业内通常有以下几种解决方案,按实现成本从低到高、适用数据量从小到大排序: --- 方案一:使用“覆盖索引”优化(最简单,不改架构) 虽然 无法使用索引树进行快速定位,但我们可以让它走索引全扫描(Index Scan),而不是全表扫描(Table Scan)。索引树的体积远小于全表数据,在内存中扫描的速度要快得多。 做法:建立一个包含你要查询的所有字段的联合索引(比如 , , )。 前提:绝对不能用 ,只能 SELECT 索引里存在的字段。 SQL示例: 适用场景:单表数据量不大(几十万级别),且只需要返回基础信息。如果需要其他字段,可以先通过覆盖索引查出 ,再做一次回表查询。 --- 方案二:使用 MySQL 原生全文索引 (Full-Text Search) 从 MySQL 5.7 开始,InnoDB 引擎原生支持全文索引,并且支持 ngram 分词器(非常适合处理中文和连续的英数字符串)。 做...