简单选择查询在没有主键的情况下运行更快的地方

时间:2018-11-09 15:46:11

标签: sqlite

我有两个具有相同数据结构的表,除了一个表在列上有主键,而另一个表没有

问题是,在具有主键的表上查询的速度平均比没有主键的表慢6到10倍。

不含PK的表格

CREATE TABLE `ULRCON01` 
(
`CONSTAC`   VARCHAR ( 7 ) NOT NULL,
`DATCRED`   VARCHAR ( 8 ),
`DATMAJD`   VARCHAR ( 8 ),
`MONTANM`   DECIMAL ( 19 ),
`CONSTLC`   VARCHAR ( 10 ),
`CONSTLL`   VARCHAR ( 35 ),
);

带有PK的表格

CREATE TABLE `ULRCON01` 
(
`CONSTAC`   VARCHAR ( 7 ) NOT NULL,
`DATCRED`   VARCHAR ( 8 ),
`DATMAJD`   VARCHAR ( 8 ),
`MONTANM`   DECIMAL ( 19 ),
`CONSTLC`   VARCHAR ( 10 ),
`CONSTLL`   VARCHAR ( 35 ),
PRIMARY KEY(`CONSTAC`)
);

查询

SELECT CONSTLC FROM ULRCON01 WHERE CONSTAC LIKE 'SIRCA00'

结果。.

// PK on CONSTAC
Request "SELECT CONSTLC FROM ULRCON01 WHERE CONSTAC LIKE 'SIRCA00'" executed in 10ms

// No PK
Request "SELECT CONSTLC FROM ULRCON01 WHERE CONSTAC LIKE 'SIRCA00'" executed in 1ms

我只是不明白..为什么主键会减慢简单的select where查询。.有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好,所以经过更多调查,它来自我们使用SQLiteDataReader的方式。 我们指定

using (var myReader = sqlCmd.ExecuteReader(CommandBehavior.KeyInfo))

这是非常昂贵的(这也是为什么没有主键运行速度更快的原因。)所以现在我们使用

using (var myReader = sqlCmd.ExecuteReader(CommandBehavior.Default))

将请求加快到2ms,而不是10ms!