Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sqlite,通过4个表进行慢速连接查询_Sqlite - Fatal编程技术网

sqlite,通过4个表进行慢速连接查询

sqlite,通过4个表进行慢速连接查询,sqlite,Sqlite,我查询了4个表:时间、标签、用户和类别。 每个表的记录不超过400条,但此查询需要70毫秒 我需要它很多次(400次),所以所有的过程总共需要大约30秒 SELECT COUNT(*) FROM times INNER JOIN tags ON times.user_id = tags.tag_id INNER JOIN users ON tags.user_nr = users.nr INNER JOIN categories ON users.category_id = categories

我查询了4个表:时间、标签、用户和类别。 每个表的记录不超过400条,但此查询需要70毫秒

我需要它很多次(400次),所以所有的过程总共需要大约30秒

SELECT COUNT(*) FROM times
INNER JOIN tags ON times.user_id = tags.tag_id
INNER JOIN users ON tags.user_nr = users.nr
INNER JOIN categories ON users.category_id = categories.id
WHERE (times.time_raw < "000560")
AND (times.time_raw != 0 )
AND (times.cell != 1 )
AND (categories.name="kategory_A")
AND (times.run_id="08")
从时间中选择计数(*)
times.user\u id=tags.tag\u id上的内部连接标记
标记上的内部联接用户。用户\u nr=users.nr
users.category\u id=categories.id上的内部联接类别
其中(times.time_原始<“000560”)
和(times.time_raw!=0)
和(times.cell!=1)
和(categories.name=“kategory_A”)
和(times.run_id=“08”)

如何加快速度?

索引是解决方案

•您应该在中经常使用的列上创建索引 WHERE子句。
•您应该在使用的列上创建索引 经常连接表。
•应在列上创建索引 在ORDER BY子句中经常使用的。
•您应该创建 列上几乎没有相同值或唯一值的索引 在表格中。
•不应在小表(表)上创建索引 因为全表扫描可能更快 而不是索引查询。
•如果可能,选择一个主键 按最合适的顺序排列行。
•如果只有一列 在WHERE子句中经常使用连接索引的 该列位于CREATEINDEX语句的第一位。
•如果不止一个 连接索引中的列经常用于WHERE子句, 将最具选择性的列放在CREATEINDEX语句的第一位


不要使用where,而是尝试使用clauseDo,在这些列上有索引吗?你能出示执行计划吗?