попробуйте:
=OR(MATCH($C:$C,INDIRECT("Received!A2:A"),0),MATCH($C:$C,INDIRECT("Received!B2:B"),0))
и:
=OR(AND(MATCH($I:$I,INDIRECT("Received!A2:A"),0),(MATCH($O:$O,INDIRECT("Received!A2:A"),0))),
AND(MATCH($I:$I,INDIRECT("Received!B2:B"),0),(MATCH($O:$O,INDIRECT("Received!B2:B"),0))))
Индексы замедляют вставки и обновления (что может стать очень серьезной проблемой при блокировке) и удорожают дисковое пространство. Вот и все.
Индексы занимают место на диске для хранения и занимают время для создания и обслуживания. Неиспользованные не приносят никакой пользы. Если для запроса имеется много индексов-кандидатов, запрос может быть замедлен, если сервер выберет «неправильный» для запроса.
Используйте эти факторы, чтобы решить, нужен ли вам индекс.
Это обычно возможно создать индексы, которые НИКОГДА не будут использоваться - например, и индекс для (не нулевого) поля только с двумя возможными значениями почти наверняка будет бесполезным.
Вам нужно объяснить запросы своего собственного приложения, чтобы сделать убедитесь, что часто выполняемые используют разумные индексы, если это возможно, и создайте не больше индексов, чем требуется для этого.
Чтобы протестировать ваше конкретное приложение, вы можете поставить «EXPLAIN QUERY PLAN» перед любым выполняемым вами запросом и проверить результаты. Он покажет вам, где он находится или не использует индексы.
Таким образом, вы можете определить, где вы можете использовать больше индексов, а где они не будут иметь значения.
Я использую SqliteSpy передать тестовые запросы, которые, кажется, вызывают проблемы.
Стоимость индекса в дисковом пространстве обычно тривиальна. Стоимость дополнительных записей для обновления индекса при изменении таблицы часто умеренная. Затраты на дополнительную блокировку могут быть значительными.
Это зависит от соотношения чтения и записи в таблице и от того, как часто индекс фактически используется для ускорения запроса.