Простой выбор, где запрос выполняется быстрее без первичного ключа - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть две таблицы с одинаковой структурой данных, за исключением того, что одна имеет первичный ключ для столбца, а другая - не .

Дело в том, что запрос к таблице с первичным ключом выполняется в среднем в 6-10 раз медленнее , чем без первичного ключа.

Стол без ПК

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

Стол с ПК

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

Я просто не понимаю .. Почему первичный ключ замедляет простой выбор места запроса ... Есть идеи?

1 Ответ

0 голосов
/ 13 ноября 2018

Хорошо, так что после более подробного изучения, это связано с тем, как мы используем SQLiteDataReader. Мы указали

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

И это довольно дорого (и поэтому работает быстрее без первичных ключей ..). Так что теперь мы используем

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

Что ускоряет запрос до 2 мс вместо 10!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...