# Summary # Cues # Notes ## **2. Cypher 查询优化是什么?** **Cypher** 是 [[Neo4j]] 图数据库的查询语言,类似 SQL 但专门用于查询图关系。 ### 未优化的查询(慢): cypher ```cypher // 查找所有与发动机相关的故障 MATCH (n)-[*]-(m) WHERE n.name = '发动机' RETURN m // 问题:会遍历所有路径,可能查出几万条数据 ``` ### 优化后的查询(快): cypher ```cypher // 限定查询深度和关系类型 MATCH (n:部件{name:'发动机'})-[:导致]->(f:故障) WHERE f.严重程度 = '高' RETURN f LIMIT 10 // 使用索引、限定关系类型、添加过滤条件、限制返回数量 ``` ### 常见的优化技巧: |优化方法|通俗解释|效果| |---|---|---| |**添加索引**|像书的目录,直接翻到某一页|查询速度提升10-100倍| |**限定关系深度**|只找直接朋友,不找朋友的朋友的朋友|避免查询爆炸| |**指定关系类型**|只找"导致"关系,不找所有关系|减少90%无关数据| |**使用标签**|先筛选"故障类"节点,再查具体内容|缩小查询范围| |**添加LIMIT**|只要前10个结果,不要全部|快速返回| ## **实际使用场景举例** 用户提问:"我的车打不着火可能是什么原因?" ### 处理流程: 1. **AC-Tree 快速识别**: - 识别出"打不着火"是一个故障现象实体 2. **Cypher 优化查询**: cypher ```cypher // 优化的查询 MATCH (symptom:故障现象{name:'打不着火'})<-[:表现为]-(cause:故障原因) WITH cause, count(*) as frequency ORDER BY frequency DESC RETURN cause.name, cause.解决方案 LIMIT 5 ``` 3. **快速返回结果**: - 电瓶没电(出现频率:40%) - 火花塞故障(出现频率:25%) - 起动机故障(出现频率:20%) - 燃油泵故障(出现频率:10%) - 防盗系统锁定(出现频率:5%)