检查多个列中是否有一个大于或等于 (>=) 的值

时间:2021-05-24 21:54:23

标签: mysql sql select query-optimization

假设我有一张这样的桌子:

id,col1,col2,col3,col4

我想检查 col1,col2,col3,col4 是否大于或等于 10

这个想法很像

SELECT * FROM table WHERE (col1 >= 10 OR col2 >= 10 OR col3 >= 10 OR col4 >= 10);

有没有更优化的方法?

我认为我可以使用 IN,但不知道如何在其中使用 >=。

2 个答案:

答案 0 :(得分:1)

假设所有值都不是 NULL,您可以使用 least()

SELECT *
FROM table
WHERE GREATEST(col1, col2, col3, col5) >= 10;

这不是更有效,但更短。

答案 1 :(得分:0)

这就是我编写脚本的方式。 您可以尝试以下方法,但性能可能会下降(不确定因为没有设置 MySQL)

测试表设置

 CREATE TABLE tbl_test (
 col1 INT
 ,col2 INT
 ,col3 INT
 );

INSERT INTO tbl_test (col1,col2,col3)
VALUES (10,15,20)
,(1,2,3)
,(4,5,6)
,(10,0,0)
,(20,0,0);

使用 GREATEST() 进行比较(不那么冗长,但可能会降低性能)

SELECT *,GREATEST(col1,col2,col3)
FROM tbl_test
WHERE GREATEST(col1,col2,col3) >= 10;

性能优化版(更详细,但性能有所提升)

出于性能原因,我通常建议使用单独的查询而不是多个 OR 语句。这允许数据库引擎使用最佳索引(如果它们存在)

SELECT * FROM tbl_test WHERE col1 >=10
UNION
SELECT * FROM tbl_test WHERE col2 >=10
UNION
SELECT * FROM tbl_test WHERE col3 >=10;
相关问题