mysql优化过多where条件

uz75evzq  于 2023-03-11  发布在  Mysql
关注(0)|答案(2)|浏览(108)

故事:我有两个学生表。我需要为表A中的每个学生查找表B中是否有更年轻且具有相同姓名的学生。
表A(非真实的表,可能是用户输入)
| 身份证|姓名|年龄|
| - ------|- ------|- ------|
| 无|吉姆|十二|
| 1个|千斤顶|十三|
| 第二章|汤姆|二十三|
表B
| 身份证|姓名|年龄|
| - ------|- ------|- ------|
| 无|吉姆|十四|
| 1个|吉尔|十个|
| 第二章|时间|八个|
| 三个|千斤顶|十二|
这是我当前的sql查询:

select * from table where name=jim and age<12 or name=jack and age<13 or ......

假设我必须过滤掉与输入过滤条件匹配的行(表A),并且where关键字后面可能会有1000多个成对的姓名和年龄组合条件,我尝试过这种方法,可以使用mybatis foreach生成查询,但效率非常低。如何优化上述查询?

holgip5t

holgip5t1#

SELECT tableA.* 
  FROM tableA 
  INNER JOIN tableB ON tableA.name = tableB.name and tableA.age > tableB.age

参见:DBFIDDLE
当您只需要查找未超过100岁的学生(WHERE age<100)时,您只需要固定比较
使用tableA.name = tableB.name将比较表A中的名称和表B中的名称

y1aodyip

y1aodyip2#

试试这个:

SELECT * 
  FROM StudentsA 
  JOIN StudentsB ON StudentsA.name = StudentsB.name
     WHERE StudentsA.age > StudentsB.age

如果您在(name,age)name上定义索引,它将更快,性能更高!

相关问题