mysql - 如何编写有效的 "SELECT a FROM t WHERE b IN() ORDER BY a"查询?

标签 mysql sql database

考虑到我的需求,我有一个简单的查询,它太慢了。查询是:

SELECT a FROM tableA WHERE b IN ("SOME_IDS_LIST") ORDER BY a

tableA 大约有 300 000 行并包含索引 (a,b)。 “SOME_IDS_LIST”列表越长,查询速度越慢。有什么办法可以加快这种查询的速度吗?我一直在互联网上寻找一些通用的解决方案,但没有成功。

最佳答案

在 yout 表上放置 b 字段的索引。

如果结果太慢。

不要使用 IN 子句,而是使用您的 ID 创建一个临时表,并使用 INNER JOIN 语句将您的临时表与 tableA 链接起来。

你的脚本:

CREATE TEMPORARY TABLE myTempTable (id int)
INSERT INTO myTempTable (all your ID)

SELECT *
FROM tableA
JOIN myTempTable
ON tableA.b = myTempTable.id

关于临时表的创建see here

关于mysql - 如何编写有效的 "SELECT a FROM t WHERE b IN() ORDER BY a"查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18019667/

相关文章:

database - 为什么这段代码有时有效,有时却无效?

database - 如何打开 EVERNOTE 文件扩展名 "*.exb"?

sql - 操作必须使用可更新的查询 ASP 查询失败

sql - 如何在SQL中查找列表定义数据

mysql - SQL 查询优化——真的没有什么可以改进的了吗?

mysql - 根据条件垂直拆分表

sql - R编程,导入数据

java - 用java从Oracle数据库中读取阿拉伯语数据

mysql - 循环遍历 Laravel 中的数据库表返回结果

php - Mysqli 检索表打印标题而不是数据