我如何优化此查询MYSQL

问题描述

大家好,我有这个查询,但是我不知道如何优化这个查询。如果有人能提前在这里指导我,我将不胜感激。

let campgrounds = [
  { number: 1,view: 'ocean',partySize: 8,isReserved: false },{ number: 5,partySize: 4,{ number: 12,isReserved: true },{ number: 18,view: 'forest',{ number: 23,isReserved: true }
]

function getCamp(campgrounds,view,size) {
   return campgrounds.filter(ground => !ground.isReserved && view === ground.view && ground.partySize >= size)
}

console.log(getCamp(campgrounds,"ocean",4));

我知道这是一个很长的查询,但我必须优化此选项,因此需要专业人士的指导谢谢

解决方法

低效模式

                 OR  Jobs.restriction   LIKE '%キャビンアテンダント%'
                 OR  Jobs.remarks       LIKE '%キャビンアテンダント%'
                 OR  Personalities.name LIKE '%キャビンアテンダント%'

这是一种常见的但效率很低的模式。

  • OR禁止使用索引
  • LIKE中通配符领先导致无法使用索引
  • WHERE子句涉及多个表的伤害。

可能的解决方法

我确实看到了可以转化为优化的模式。您似乎正在对照大量列检查用户提供的字符串。如果可以使用LIKE而不是使用FULLTEXT,那么可以找到一种更快的解决方案。 (对不起,我不知道日语是否可以与FULLTEXT一起使用;您可能需要MySQL 8.0,它对UTF-8进行了很多改进。)

这是技巧:

  1. 将所有这些搜索列(限制,说明,名称等)中的数据收集到一个列中,甚至可以收集到一个新表中。
  2. FULLTEXT应用于该列。
  3. 仅在该列中搜索;获取匹配的ID,然后JOIN到所有其他表。

后备广告

即使FULLTEXT在亚洲语言中不能很好地工作,将一个字符串应用LIKE也会有所帮助。

语法错误?

 LEFT JOIN jobs_career_paths JobsCareerPaths Page 3 / 4 ON Jobs.id = (JobsCareerPaths.job_id)

看起来像语法错误。

需要综合索引

    LEFT JOIN  affiliates CareerPaths
          ON (CareerPaths.type = 3
         AND  CareerPaths.id = (JobsCareerPaths.affiliate_id)
         AND (CareerPaths.deleted) IS NULL

CareerPaths需要此综合索引:

INDEX(type,id,deleted)

,列以任何顺序排列。 3个单独的索引不是很好。 (还要检查其他JOINs。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...