Mysql SQL查询模拟

Mysql SQL查询模拟,mysql,sql,Mysql,Sql,我有一个sql查询。 此查询将记录在51、14和54中的列_2。 对不起我的坏格拉默。以下是查询: SELECT t1.'column_1' FROM table_1 t1 WHERE t1.'column_2' IN (51, 17) AND t1.'column_2' NOT IN (SELECT t2.'column_1' FROM table_1 t2 WHERE t2.'column_2' = 54) AND t1.create_time BETWEEN (NOW() - INTERV

我有一个sql查询。 此查询将记录在51、14和54中的列_2。 对不起我的坏格拉默。以下是查询:

SELECT t1.'column_1'
FROM table_1 t1
WHERE t1.'column_2' IN (51, 17)
AND t1.'column_2' NOT IN (SELECT t2.'column_1' FROM table_1 t2 WHERE t2.'column_2' = 54)
AND t1.create_time BETWEEN (NOW() - INTERVAL 25 HOUR) AND (NOW() - INTERVAL 24 HOUR)
ORDER BY t1.create_time DESC 
t1和t2是同一张表

随着具有“表\名称”“列\ 2”=2的记录数的增加,此查询将失去其效率。 有没有更好的方法来简化此查询


谢谢您的帮助。

您的查询的当前结构看起来已经相当优化了,但是添加索引可能会使其执行更快。考虑这个稍微更新的版本,接着是索引定义:

选择t1.1列 从表_name t1 哪里 第51、17和17栏中的第2列 不存在从表_name t2中选择1,其中t2.column_1=t1.column_2和 t2.第2列=54和 在现在-间隔24小时和现在-间隔25小时之间创建时间 订购人 创建时间描述; 在表名称列2中创建索引idx1,创建时间;-用于外部查询 在表\u name列\u 2、列\u 1上创建索引idx2;-用于内部存在查询 上面的索引idx1可用于加速外部查询的WHERE子句。对于exists逻辑,我们定义了第二个索引idx2,它应该让MySQL快速查找表中的任何列_2值,并确定它是否是匹配的记录


您可以在调优前后对上述查询运行EXPLAIN,以查看索引可能带来的好处。

…t2.column_1=t1.column_2和。。。第二部分对我的问题不是一个好主意,但谢谢你的其余部分。这不是一个好主意。。。事实上,我上面写的是个好主意,甚至可能是写逻辑的最佳方式。对不起,这是我的错。我不知道如何使用它。我编辑了这个问题。我在两个查询中使用相同的表。可以通过减慢查询速度来排序吗?也许它可以提供更多的信息。这张桌子有多大?返回的结果集有多大?有51/17的行也有54行的比例是多少?即使在解决了单引号的问题之后,由于BETWEEN子句过滤掉了所有内容,编写的查询也应该返回0行。@Gordon Linoff感谢您的关注。每小时创建近1k数据。只有1%的人有17岁,54岁还是17岁并不重要。这是我的错误,我修正了中间条款。