|
Помогите оптимизировать запрос и построить правильные индексы
|
|||
---|---|---|---|
#18+
Здравствуйте! Помогите, пожалуйста, с оптимизацией запроса и построением индексов, если у Вас найдется на это немного времени. Заранее извиняюсь - не силен в sql. Имею две базы данных sqlite. В первой есть такая таблица CREATE TABLE mgWordsRelations ( id INTEGER PRIMARY KEY, id_norm INTEGER, id_norminrel INTEGER, UNIQUE (id_norm,id_norminrel) ) А во второй такая: CREATE TABLE wform ( id INTEGER PRIMARY KEY, wordForm TEXT, ancode TEXT, wordNorm INTEGER ) Данные хранятся в разных таблицах из-за особенностей архитектуры, подключаю вторую таким образом: ATTACH DATABASE 'second.db' AS Lang Мне было необходимо выполнить следующий запрос: SELECT wordForm FROM Lang.wform WHERE (ancode='someAncode') AND (wordNorm IN (SELECT DISTINCT id_norminrel FROM mgWordsRelations WHERE id_norm IN (SELECT wordNorm FROM Lang.wform WHERE wordForm='someWord') ) ) Быстродействие меня не устраивало и я попробовал переписать его с использованием inner join: SELECT wf1.wordForm FROM Lang.wform wf1 JOIN mgWordsRelations wrel ON (wf1.wordNorm = wrel.id_norminrel) JOIN Lang.wform wf2 ON (wrel.id_norm = wf2.wordNorm) WHERE wf2.wordForm = 'someWord' AND wf1.ancode='someAncode' Прибавки в скорости это не дало, а наоборот значительно ее уменьшило. Подскажите - существуют ли дополнительные пути оптимизации запроса и, главное, какие корректные индексы нужно создать для ускорения выполнения того или иного варианта выполнения данного запроса? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2009, 00:03 |
|
|
start [/forum/topic.php?fid=54&msg=36313011&tid=2009413]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
64ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 301ms |
total: | 456ms |
0 / 0 |