Я создал индекс в одном столбце таблицы как пользователь sys, так как я не упомянул имя схемы, которое оно создало в рамках схемы sys. Когда я запускаю запрос как другой пользователь с доступом для чтения к таблице, я не вижу используемый индекс. Не могли бы вы сообщить мне, будет ли индекс игнорироваться в оракуле, если индекс создается по другой схеме?Индекс, созданный под другим пользователем
4
A
ответ
2
Это не разрешения, специфичные для объектов индекса. Итак, я бы сказал, что индекс будет автоматически использоваться, даже если он находится в другой схеме. Но, как комментарий на связанный ответ поднял сомнения, я сделал эксперимент с использованием Oracle 11g:
Как пользователь Соню:
SQL> create table t as (select level n from dual connect by level < 100);
Table created.
SQL> explain plan for select * from sonia.t where n < 10;
SQL> @UTLXPLS.SQL
TABLE ACCESS FULL T
SELECT STATEMENT
SQL> grant select on t to sylvain;
Grant succeeded.
Как пользователь Сильвен:
SQL> explain plan for select * from sonia.t where n < 10;
Explained.
SQL> @UTLXPLS.SQL
TABLE ACCESS FULL T
SELECT STATEMENT
SQL> create index syl_idx on sonia.t(n);
Index created.
SQL> explain plan for select * from sonia.t where n < 10;
Explained.
SQL> @UTLXPLS.SQL
INDEX RANGE SCAN SYL_IDX
SELECT STATEMENT
Назад до sonia:
SQL> explain plan for select * from sonia.t where n < 10;
Explained.
SQL> @UTLXPLS.SQL
INDEX RANGE SCAN SYL_IDX
SELECT STATEMENT
Как вы можете видеть, SYL_IDX
(индекс sonia.t созданных в Сильвенах схемы) используется как при запросе таблицы из Сони и от Сильвианы. Наличие разрешения на выбор на столе является достаточным.
1
Нет, его не следует игнорировать. Оптимизатором может быть другая причина, чтобы не использовать индекс.
Легко проверить, что вы можете использовать индекс в другой схеме:
-- Connected as power_user
SQL> CREATE TABLE some_user.a_table (a_field INTEGER);
Table created
SQL> INSERT INTO some_user.a_table
2 SELECT rownum FROM dual CONNECT BY level <= 10000;
10000 rows inserted
SQL> CREATE INDEX power_user.an_index ON some_user.a_table (a_field);
Index created
-- Connected as some_user
SQL> select * from some_user.a_table where a_field = 50;
A_FIELD
----------
50
Execution Plan
----------------------------------------------------------
Plan hash value: 573181184
-----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 1 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| AN_INDEX | 1 | 13 | 1 (0)| 00:00:01 |
-----------------------------------------------------------------------------
Смежные вопросы
- 1. Почему тип Oracle, созданный одним пользователем, не отображается другим пользователем?
- 2. Nant запускать задачу exec под другим пользователем
- 3. Получение среды процесса, работающего под другим пользователем
- 4. Запустите ProcessBuilder под другим пользователем в linux
- 5. Сервер Xvfb не работает под другим пользователем
- 6. Выполнение под другим пользователем на FreeBSD
- 7. пытается получить пользователь назначить под другим пользователем
- 8. Запуск приложения при запуске под другим пользователем
- 9. Как я могу запустить файл Jenkins WAR под другим пользователем?
- 10. Python + Django запускается под другим пользователем на apache2 (httpd), Redhat
- 11. Как удалить файл, созданный другим пользователем с помощью C?
- 12. PHP файл блокировки чтения, созданный другим пользователем Linux?
- 13. Созданный пользователем SQL-запрос
- 14. Загрузить макет, созданный пользователем
- 15. Разрешить www-data выполнить rsync под другим пользователем (php)
- 16. SVN: Демон Force svn для запуска под другим пользователем
- 17. Как дублировать сокет для целевого процесса под другим пользователем
- 18. Нерест фонового процесса под другим пользователем в Баше
- 19. Почему exec и proc_open работают под другим пользователем в IIS?
- 20. Открыть общий файл под другим пользователем и доменом?
- 21. Git Push под другим пользователем и Git Push With Diff
- 22. Ruby RVM под другим пользователем из сценария Bash
- 23. Как подать пакет PyPI под другим пользователем, чем мой ~/.pypirc
- 24. Команда Powershell invoke под другим пользователем на той же машине
- 25. Apache2, Kerberos, SSI: как подключиться под другим пользователем
- 26. Запустите веб-приложение ASP.NET под другим пользователем, чем текущий пользователь.
- 27. Выполнение внешних команд через os/exec под другим пользователем
- 28. Видеть рабочего под другим пользователем с модулем кластера Node.js?
- 29. Создайте обертку для вина, которая работает под другим пользователем?
- 30. Добавить индекс по таблице, принадлежащей другим пользователем в Postgres
Для справки см: http://stackoverflow.com/questions/3439529/what-to-grant-to- user-to-use-index-of-table-while-quering Не уверен, что это должно быть отмечено как дубликат, так как ответ (только), вероятно, не является удовлетворительным. Или это? –
Ответ кажется противоречивым, говорят, что другой говорит, что он не использует. – Hari
У меня нет доступа к экземпляру oracle на данный момент, но вы можете начать с чтения http://docs.oracle.com/cd/B10500_01/server.920/a96521/privs.htm#15311. Вы также можете исследовать системные представления, чтобы проверить, есть ли там ваш индекс. –