Как мне составить временную таблицу, используемую для поиска совпадений в большой таблице? - PullRequest
0 голосов
/ 18 декабря 2010

Таблица A содержит миллионы строк проиндексированных фраз (1-5 слов).Я ищу соответствия примерно 20-30 фраз, например («птица», «кошка», «корова», «фиолетовый дождь» и т. Д.).Я знаю, что оператор IN, как правило, плохая идея, когда набор поиска велик, поэтому решение состоит в том, чтобы создать временную таблицу (в памяти) и присоединить ее к таблице, которую я ищу.Я могу создать TEMP TABLE B, используя мои поисковые фразы, и я знаю, что если я сделаю соединение, механизм SQL будет работать с индексами таблицы A.Имеет ли какое-либо значение индексирование фраз TEMP TABLE B?

Ответы [ 2 ]

1 голос
/ 18 декабря 2010

Почему IN был бы плохой идеей, когда условий поиска много?

Из того, что я понял, когда читал о Планировщике запросов SQLite , список IN (1,2, 3,4,5,6, N) создаст тот же план запроса, что и объединение с временной таблицей с теми же строками.

Индекс во временной таблице поисковых терминов не сделает запрос более быстрымтак как вы обрабатываете все условия.Переход по индексу только добавляет время обработки.

1 голос
/ 18 декабря 2010

Редактировать ... Я только что понял, что вы спрашиваете о sqlite. Я бы сказал, что тот же принцип хранения очень маленькой объединенной таблицы в кеше все же будет применяться.

При объединении таблиц сервер SQL будет помещать соответствующее содержимое одной таблицы в кеш, если это возможно. Ваши 20-30 фраз наверняка уместятся в кеше, так что на самом деле не будет смысла индексировать. Индексирование полезно для поиска значений, но SQL-сервер уже будет иметь эти значения в кеше. Кроме того, поскольку сервер SQL читает данные по странице за раз (страница размером 8 КБ), он сможет прочитать всю таблицу за одно чтение.

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

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