![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
INDEXED BY заставляет планировщик запросов
SQLite использовать конкретный названный индекс на
DELETE, SELECT
или UPDATE. INDEXED BY это расширение SQLite
и не портируется к другим движкам базы данных SQL. "INDEXED BY index-name"
определяет, что названный индекс должен использоваться, чтобы искать значения
в предыдущей таблице. Если index-name
не существует или не может использоваться для запроса, то подготовка
SQL-оператора терпит неудачу. "NOT INDEXED" определяет, что никакой индекс
не должен использоваться для доступа к предыдущей таблице, включая
подразумеваемые индексы, созданные ограничениями UNIQUE и PRIMARY KEY.
Однако, rowid
может все еще использоваться, чтобы искать записи, даже когда указано
"NOT INDEXED". Некоторые базы данных SQL обеспечивают нестандартные механизмы, которые
могут использоваться, чтобы дать ключ оптимизатору запросов о том, какие
индексы это должно использовать для конкретного запроса.
INDEXED BY в SQLite НЕ такой механизм
и это не должно использоваться как таковой. INDEXED BY не дает намеки
оптимизатору, который индекс использовать, это дает оптимизатору требование,
который индекс использовать. Если оптимизатор запросов будет неспособен
использовать индекс, определенный INDEXED BY,
запрос потерпит неудачу с ошибкой. INDEXED BY не
предназначается для использования в настройке исполнения запроса.
INDEXED BY должен поднять ошибку периода выполнения, если изменение схемы,
такое как удаление или создание индекса, вызывает изменение плана запроса для
чувствительного ко времени запроса. INDEXED BY разработан, чтобы помочь
обнаружить нежелательные изменения плана запросов во время регрессионного
тестирования. Разработчиков приложений убеждают опустить все использование
INDEXED BY во время проектирования приложений, внедрения, тестирования и
настройки. Если INDEXED BY должен использоваться вообще, он должен быть
вставлен в самом конце процесса разработки.
Контрольный список планировщика запроса
описывает шаги, которые разработчики приложений должны сделать,
чтобы помочь решить проблемы планировщика запроса. Заметьте, что
использование INDEXED BY это последнее средство, чтобы использовать
только, когда все другие меры терпят неудачу. Одиночный оператор "+"
может использоваться, чтобы дисквалифицировать условия в операторе Where от
использования индексами. Тщательное использование одноместных + может иногда
помогать препятствовать тому, чтобы планировщик запроса выбрал плохой индекс,
не ограничивая его использованием одного определенного индекса.
Тщательное размещение одноместных операторов + это
лучший метод для управления, какие индексы используются. sqlite3_stmt_status() вместе с
SQLITE_STMTSTATUS_FULLSCAN_STEP и
SQLITE_STMTSTATUS_SORT могут использоваться, чтобы обнаружить во время
выполнения, когда SQL-оператор не делает эффективное использование индексов.
Много запросов могут предпочесть использовать
sqlite3_stmt_status(), чтобы обнаружить
неправильное употребление индекса, а не INDEXED BY.
Choose any three.
1. Как работает INDEXED BY
2. См. также