Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужна помощь создании индекса 
:(
    Опции темы
Кли
Дата 25.2.2018, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Всем привет!
Столкнулся с такой задачей: Создать тестовую таблицу для проверки работы индекса. Используя цикл заполнить таблицу 5 тысячами записей. Убедиться, что записи действительно созданы. Выполнить к таблице запрос, в условии которого есть неиндексированное поле. Построить индекс для этого поля и повторить запрос, убедиться, что индекс ускоряет выполнение запроса.
С первой части я справился:
Код


CREATE TABLE TABL
   (ID NUMBER NOT NULL,
   NAME VARCHAR2(1000 CHAR));

SET SERVEROUTPUT ON
DECLARE
N NUMBER := 1;
BEGIN
LOOP
INSERT INTO TABL VALUES (N,DBMS_RANDOM.STRING('p',TRUNC(DBMS_RANDOM.VALUE(1,1000))));
N:=N+1;
EXIT WHEN (N>5000);
END LOOP;
END;
/

SELECT TO_CHAR(SYSTIMESTAMP,'HH24:MI:SS.FF') FROM DUAL;
SELECT COUNT(*) FROM TABL WHERE NAME LIKE '%WO%';
SELECT TO_CHAR(SYSTIMESTAMP,'HH24:MI:SS.FF') FROM DUAL;

Помогите со второй частью а именно: Построить индекс для этого поля. И как вообще индекс работает?
PM MAIL   Вверх
Akina
Дата 25.2.2018, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20393
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 44
Всего: 449



В задании было явно указано, какой тип поля использовать?
Ну а насчёт индекса - в показанной структуре попробуйте что-то типа
Код


SELECT COUNT(*) FROM tabl WHERE name like 'A%';
CREATE INDEX idx ON tabl(name);
SELECT COUNT(*) FROM tabl WHERE name like 'A%';

с замером времени и просмотром плана.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Кли
Дата 27.2.2018, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 20.11.2016

Репутация: нет
Всего: нет



Cпасибо большое
PM MAIL   Вверх
Akina
Дата 27.2.2018, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20393
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 44
Всего: 449



Заодно попробуйте, если поле именно текстовое, префиксный индекс:

Код

SELECT COUNT(*) FROM tabl WHERE name like 'ABC%';
CREATE INDEX idx2 ON tabl(name(2));
SELECT COUNT(*) FROM tabl WHERE name like 'ABC%';

и то же, но с префиксами длины, скажем, 3 и 4 (ну то есть чуть меньше, равно и чуть больше, чем статическая часть условия отбора). И сравнить со скоростью обработки по индексу по всему полю...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Google
  Дата 26.5.2019, 18:08 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1099 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.