Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.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
Ios select语句非常慢_Ios_Sqlite - Fatal编程技术网

Ios select语句非常慢

Ios select语句非常慢,ios,sqlite,Ios,Sqlite,我正在创建4个表,然后从中进行选择。选择对于前3条select语句非常有效,但第4条在iPhone模拟器上大约需要10秒,在sqlite3控制台上需要5秒。 另外,我在iPhone模拟器上得到0个结果,但在控制台上得到1个结果。但这是我在解决性能问题后想要解决的问题 我读了一些关于索引以及它们如何提高性能的文章,但我不知道如何在代码中实现它们 sql0 = [[NSString alloc]initWithFormat:@" create table v%i as select id_produ

我正在创建4个表,然后从中进行选择。选择对于前3条select语句非常有效,但第4条在iPhone模拟器上大约需要10秒,在sqlite3控制台上需要5秒。 另外,我在iPhone模拟器上得到0个结果,但在控制台上得到1个结果。但这是我在解决性能问题后想要解决的问题

我读了一些关于索引以及它们如何提高性能的文章,但我不知道如何在代码中实现它们

sql0 = [[NSString alloc]initWithFormat:@"
create table v%i
as select id_produkt
from v%i natural join produkt_eigenschaft 
where id_eigenschaft = 
(select id_eigenschaft from eigenschaft where at = '%@')",counter,counter-1,selectedStringItem];
然后:

NSString *sqleig = [[NSString alloc]initWithFormat:@"
select at 
from eigenschaft 
where id_eigenschaft IN 
(select distinct id_eigenschaft
from produkt_eigenschaft
where id_produkt IN (select * from v%i)) 
AND rubrik = '%i'",counter-1, [sender tag] + 1];
为什么这句话执行得这么慢?我该怎么解决呢? 提前谢谢

编辑:解释查询计划和.schema

explain query plan create table v3 as select id_produkt from v2 natural join produkt_eigenschaft where id_eigenschaft = (select id_eigenschaft from eigenschaft where at = '101-170');
0|0|1|SCAN TABLE produkt_eigenschaft (~100000 rows)
0|0|0|EXECUTE SCALAR SUBQUERY 1
1|0|0|SEARCH TABLE eigenschaft USING AUTOMATIC COVERING INDEX (at=?) (~7 rows)
0|1|0|SEARCH TABLE v2 USING AUTOMATIC COVERING INDEX (id_produkt=?) (~7 rows)

explain query plan select at from eigenschaft where id_eigenschaft IN (select distinct id_eigenschaft from produkt_eigenschaft where id_produkt IN (select * from v3)) AND rubrik = '5';
0|0|0|SCAN TABLE eigenschaft (~10000 rows)
0|0|0|EXECUTE LIST SUBQUERY 1
1|0|0|SCAN TABLE produkt_eigenschaft (~100000 rows)
1|0|0|EXECUTE LIST SUBQUERY 2
2|0|0|SCAN TABLE v3 (~1000000 rows)
1|0|0|USE TEMP B-TREE FOR DISTINCT



CREATE TABLE eigenschaft (id_eigenschaft integer,rubrik integer,en text,at text,ba text,bg text,hr text,cz text,hu text,pl text,ro text,ru text,rs text,sk text,si text);
CREATE TABLE farbe (id_farbe integer,hexcode text,farbton integer,farbname text);
CREATE TABLE produkt (id_produkt integer,code text,pdf_link text,image_link text,image_small blob,link text,en text,at text,ba text,bg text,hr text,cz text,hu text,pl text,ro text,ru text,rs text,sk text,si text,active integer);
CREATE TABLE produkt_eigenschaft (id_produkt integer,id_eigenschaft integer);
CREATE TABLE produkt_farbe (id_produkt integer,id_farbe integer);
CREATE TABLE produkt_surface (id_surface integer,id_produkt integer,image_link text);
CREATE TABLE produkt_text (id_produkt integer,en text,at text,ba text,bg text,hr text,cz text,hu text,pl text,ro text,ru text,rs text,sk text,si text);
CREATE TABLE rubrik (id integer,en text,at text,ba text,bg text,hr text,cz text,hu text,pl text,ro text,ru text,rs text,sk text,si text);
CREATE TABLE v0(id_produkt INT);
CREATE TABLE v1(id_produkt INT);
CREATE TABLE v2(id_produkt INT);
CREATE TABLE v3(id_produkt INT);

用索引解决了它

create index i on produkt_eigenschaft (id_eigenschaft)

在选择之前调用此函数一次,然后在控制台中显示运行这些查询的输出,以及您的模式(使用
.schema
命令)_O@CL从v0到v3,它们都有一百万行。选择count(*)v3返回1行运行
ANALYZE
命令以获得更准确的估计值。