我有两个具有相同数据结构的表,除了一个表在列上有主键,而另一个表没有。
问题是,在具有主键的表上查询的速度平均比没有主键的表慢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查询。.有什么想法吗?
答案 0 :(得分:0)
好,所以经过更多调查,它来自我们使用SQLiteDataReader的方式。 我们指定
using (var myReader = sqlCmd.ExecuteReader(CommandBehavior.KeyInfo))
这是非常昂贵的(这也是为什么没有主键运行速度更快的原因。)所以现在我们使用
using (var myReader = sqlCmd.ExecuteReader(CommandBehavior.Default))
将请求加快到2ms,而不是10ms!