Sql Web应用程序中的查询速度慢,但命令行中的查询速度快

Sql Web应用程序中的查询速度慢,但命令行中的查询速度快,sql,sqlite,inner-join,Sql,Sqlite,Inner Join,我需要从两个由第三个表链接的表中检索记录。除了链接其他两个表的键之外,会话内容不包含任何我需要的信息 我目前正在使用这些联接: SELECT sessions.name, rooms.name, slots.type, slots.dayString, slots.startHour, slots.startMinute, slots.endHour, slots.endMinute FROM slots INNER JOIN sessions INNER JOIN rooms ; 在SQLi

我需要从两个由第三个表链接的表中检索记录。除了链接其他两个表的键之外,会话内容不包含任何我需要的信息

我目前正在使用这些联接:

SELECT sessions.name, rooms.name, slots.type, slots.dayString, slots.startHour, slots.startMinute, slots.endHour, slots.endMinute
FROM slots
INNER JOIN sessions
INNER JOIN rooms
;
在SQLite DB browser中只需要50毫秒,但在调用相关API端点时需要几秒钟的缓冲

如果加载需要这么长的时间,我就不能使用它。除了限制它返回的行数(当前返回77000行)之外,还有没有其他方法来缩短查询时间

会话内容不包含除 键链接其他两个表

但是您不使用这些键来设置链接表的条件,因此您实际要做的是3个表的交叉连接,结果是所有表的所有行的笛卡尔积。
对每个联接使用
ON
子句来设置条件:

SELECT sn.name, r.name, s.type, s.dayString, s.startHour, s.startMinute, s.endHour, s.endMinute
FROM slots s 
INNER JOIN sessions sn ON sn.slot_id = s.slot_id
INNER JOIN rooms r ON r.room_id = sn.room_id;

将我在上的子句中使用的列名更改为实际列名。

您能详细说明一下连接条件是什么(在插槽、会话和会议室之间)?@KenLee您所说的“连接条件”是什么意思?谢谢你的回答。我替换了所有的列名,但是“fromslots”后面的“s”是什么意思?当我删除s时,它会起作用,但我不确定它是否代表任何重要内容。@WhynarySearch
s
是在插槽s的
中定义的,它是表
slots
的别名。它与其他两个别名
sn
r
一样用于限定列名,因此在引用类似
slot\u id
的列时不会出现歧义,该列存在于两个表
slots
sessions
中。代码应按原样工作,而不删除这些别名。@WhynarySearch,如您在此处所见:只要列名正确,代码在语法上是正确的。我的错误。此
内部连接会话sn ON sn.slot\u id=s.slot\u id
是否优于此
内部连接会话ON sessions.slot\u id=slots.slot\u id
。它们有何不同?@WhynarySearch不,它们的工作原理相同。我更喜欢使用像
t
s
这样的别名,这会使代码更短(而且我相信更可读)。此外,如果存在表的自联接,则不可能执行以下操作:
从tablename内部联接tablename ON tablename.col=tablename.col
,但这将起作用:
从tablename t1内部联接tablename t2 ON t1.col=t2.col