Drop index (transact-sql)drop index (transact-sql)

Создание Function-Based INDEX

В Oracle, вы не ограничены созданием индексов только на столбцах. Вы можете создавать индексы на базе функций.

Синтаксис

Синтаксис для создания function-based index в Oracle/PLSQL:

CREATE INDEX index_name ON table_name (function1, function2, … function_n) ;

UNIQUE Указывает на то, что сочетание значений в индексируемых столбцах должны быть уникальными.index_name Наименование индекса.table_name Имя таблицы для которой создается индекс.function1, function2, … function_n Функции для использования в индексе.COMPUTE STATISTICS Это послание Oracle для сбора статистических данных во время создания индекса. Статистические данные затем используются оптимизатором, чтобы выбрать «план выполнения», когда выполняются SQL запросы.

Пример

Рассмотрим на примере того, как создать function-based index в Oracle/PLSQL. Например:

Oracle PL/SQL

CREATE INDEX supplier_idx
ON supplier (UPPER(supplier_name));

1
2

CREATEINDEXsupplier_idx

ONsupplier(UPPER(supplier_name));

В этом примере мы создали index, основанный на вычислении поля supplier_name в верхний регистр с помощью функции UPPER. Однако, чтобы быть уверенным, что оптимизатор Oracle использует этот индекс при выполнении ваших SQL предложений, убедитесь, что UPPER (supplier_name) не вычисляет значения NULL. Для обеспечения этого, добавьте UPPER (supplier_name) IS NOT NULL к вашему WHERE следующим образом:

Oracle PL/SQL

SELECT supplier_id, supplier_name, UPPER(supplier_name)
FROM supplier
WHERE UPPER(supplier_name) IS NOT NULL
ORDER BY UPPER(supplier_name);

1
2
3
4

SELECTsupplier_id,supplier_name,UPPER(supplier_name)

FROMsupplier

WHEREUPPER(supplier_name)ISNOTNULL

ORDERBYUPPER(supplier_name);

ПримерыExamples

Г.D. Создание статистики для внешней таблицыCreate statistics on an external table

Помимо указания списка столбцов при создании статистики для внешней таблицы необходимо определить, следует ли создавать статистику с помощью выборки строк или путем сканирования всех строк.The only decision you need to make when you create statistics on an external table, besides providing the list of columns, is whether to create the statistics by sampling the rows or by scanning all of the rows. Инструкции CREATE и DROP STATISTICS для внешних таблиц не поддерживаются в базе данных SQL Azure.CREATE and DROP STATISTICS on external tables are not supported in Azure SQL Database.

Поскольку SQL ServerSQL Server импортирует данные из внешней таблицы во временную таблицу для создания статистики, полное сканирование займет больше времени.Since SQL ServerSQL Server imports data from the external table into a temporary table to create statistics, the full scan option will take much longer. Для большой таблицы обычно достаточно выполнить выборку по умолчанию.For a large table, the default sampling method is usually sufficient.

Ж.G. Создание статистики с помощью полной проверкиCreate statistics by using a full scan

В следующем примере создается статистика на основе проверки всех строк в таблице .The following example creates the statistics, based on scanning all of the rows in the table.

РазрешенияPermissions

Пользователь должен иметь разрешение для полнотекстового каталога и разрешение для таблицы или индексированного представления либо являться членом предопределенной роли сервера или предопределенных ролей базы данных или .User must have permission on the full-text catalog and have permission on the table or indexed view, or be a member of the fixed server role, or , or fixed database roles.

Если указана инструкция , пользователь должен иметь разрешение REFERENCES на указанный список стоп-слов.If is specified, the user must have REFERENCES permission on the specified stoplist. Это разрешение может быть предоставлено владельцем списка стоп-слов.The owner of the STOPLIST can grant this permission.

Примечание

Любому пользователю предоставлено разрешение REFERENCE на список стоп-слов по умолчанию, поставляемый в составе SQL ServerSQL Server.The public is granted REFERENCE permission to the default stoplist that is shipped with SQL ServerSQL Server.

How to distinguish between index and views

VIEW:

  • A VIEW is a data object which contains no data. Its contents are the resultant of the base table. They are operated just like the base table but they don’t contain any data of their own.
  • A VIEW is similar to a table but may contain data from one or more tables connected with each other through a common set of criteria.
  • A VIEW is a physical object but it is a logical table. A VIEW just refers to data which stored in base tables.
  • A VIEW is also one of the database objects.
  • A VIEW can be used in any SELECT statement like a table.
  • A VIEW provides security for both data and table of a database. Suppose by mistake a table is dropped, it can’t be recovered. but if a view dropped, it can be created again.

INDEX:

  • An INDEX is also a table. So it has a data structure.
  • INDEXES are pointers that represent the physical address of a data.
  • An INDEX is created on columns of a table.
  • An INDEX makes a catalog based on one or more columns of a table.
  • One table may contain one or more INDEX tables.
  • An INDEX can be created on a single column or combination of columns of a database table.

SQL Справочник

SQL Ключевые слова
ADD
ADD CONSTRAINT
ALTER
ALTER COLUMN
ALTER TABLE
ALL
AND
ANY
AS
ASC
BACKUP DATABASE
BETWEEN
CASE
CHECK
COLUMN
CONSTRAINT
CREATE
CREATE DATABASE
CREATE INDEX
CREATE OR REPLACE VIEW
CREATE TABLE
CREATE PROCEDURE
CREATE UNIQUE INDEX
CREATE VIEW
DATABASE
DEFAULT
DELETE
DESC
DISTINCT
DROP
DROP COLUMN
DROP CONSTRAINT
DROP DATABASE
DROP DEFAULT
DROP INDEX
DROP TABLE
DROP VIEW
EXEC
EXISTS
FOREIGN KEY
FROM
FULL OUTER JOIN
GROUP BY
HAVING
IN
INDEX
INNER JOIN
INSERT INTO
INSERT INTO SELECT
IS NULL
IS NOT NULL
JOIN
LEFT JOIN
LIKE
LIMIT
NOT
NOT NULL
OR
ORDER BY
OUTER JOIN
PRIMARY KEY
PROCEDURE
RIGHT JOIN
ROWNUM
SELECT
SELECT DISTINCT
SELECT INTO
SELECT TOP
SET
TABLE
TOP
TRUNCATE TABLE
UNION
UNION ALL
UNIQUE
UPDATE
VALUES
VIEW
WHERE

MySQL Функции
Функции строк
ASCII
CHAR_LENGTH
CHARACTER_LENGTH
CONCAT
CONCAT_WS
FIELD
FIND_IN_SET
FORMAT
INSERT
INSTR
LCASE
LEFT
LENGTH
LOCATE
LOWER
LPAD
LTRIM
MID
POSITION
REPEAT
REPLACE
REVERSE
RIGHT
RPAD
RTRIM
SPACE
STRCMP
SUBSTR
SUBSTRING
SUBSTRING_INDEX
TRIM
UCASE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATAN2
AVG
CEIL
CEILING
COS
COT
COUNT
DEGREES
DIV
EXP
FLOOR
GREATEST
LEAST
LN
LOG
LOG10
LOG2
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SUM
TAN
TRUNCATE
Функции дат
ADDDATE
ADDTIME
CURDATE
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURTIME
DATE
DATEDIFF
DATE_ADD
DATE_FORMAT
DATE_SUB
DAY
DAYNAME
DAYOFMONTH
DAYOFWEEK
DAYOFYEAR
EXTRACT
FROM_DAYS
HOUR
LAST_DAY
LOCALTIME
LOCALTIMESTAMP
MAKEDATE
MAKETIME
MICROSECOND
MINUTE
MONTH
MONTHNAME
NOW
PERIOD_ADD
PERIOD_DIFF
QUARTER
SECOND
SEC_TO_TIME
STR_TO_DATE
SUBDATE
SUBTIME
SYSDATE
TIME
TIME_FORMAT
TIME_TO_SEC
TIMEDIFF
TIMESTAMP
TO_DAYS
WEEK
WEEKDAY
WEEKOFYEAR
YEAR
YEARWEEK
Функции расширений
BIN
BINARY
CASE
CAST
COALESCE
CONNECTION_ID
CONV
CONVERT
CURRENT_USER
DATABASE
IF
IFNULL
ISNULL
LAST_INSERT_ID
NULLIF
SESSION_USER
SYSTEM_USER
USER
VERSION

SQL Server функции
Функции строк
ASCII
CHAR
CHARINDEX
CONCAT
Concat with +
CONCAT_WS
DATALENGTH
DIFFERENCE
FORMAT
LEFT
LEN
LOWER
LTRIM
NCHAR
PATINDEX
QUOTENAME
REPLACE
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
TRANSLATE
TRIM
UNICODE
UPPER
Функции чисел
ABS
ACOS
ASIN
ATAN
ATN2
AVG
CEILING
COUNT
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
PI
POWER
RADIANS
RAND
ROUND
SIGN
SIN
SQRT
SQUARE
SUM
TAN
Функции дат
CURRENT_TIMESTAMP
DATEADD
DATEDIFF
DATEFROMPARTS
DATENAME
DATEPART
DAY
GETDATE
GETUTCDATE
ISDATE
MONTH
SYSDATETIME
YEAR
Функции расширений
CAST
COALESCE
CONVERT
CURRENT_USER
IIF
ISNULL
ISNUMERIC
NULLIF
SESSION_USER
SESSIONPROPERTY
SYSTEM_USER
USER_NAME

MS Access функции
Функции строк
Asc
Chr
Concat with &
CurDir
Format
InStr
InstrRev
LCase
Left
Len
LTrim
Mid
Replace
Right
RTrim
Space
Split
Str
StrComp
StrConv
StrReverse
Trim
UCase
Функции чисел
Abs
Atn
Avg
Cos
Count
Exp
Fix
Format
Int
Max
Min
Randomize
Rnd
Round
Sgn
Sqr
Sum
Val
Функции дат
Date
DateAdd
DateDiff
DatePart
DateSerial
DateValue
Day
Format
Hour
Minute
Month
MonthName
Now
Second
Time
TimeSerial
TimeValue
Weekday
WeekdayName
Year
Другие функции
CurrentUser
Environ
IsDate
IsNull
IsNumeric

SQL ОператорыSQL Типы данныхSQL Краткий справочник

Последовательность столбцов в составном индексе

Последовательность, в которой столбцы представлены в составном индексе, достаточно важна. Дело в том, что получить набор данных по запросу, затрагивающему только первый из проиндексированных столбцов, можно. Однако в большинстве СУБД невозможно или неэффективно получение данных только по второму и далее проиндексированным столбцам (без ограничений на первый столбец).

Например, представим себе телефонный справочник, отсортированный вначале по городу, затем по фамилии, и затем по имени. Если вы знаете город, вы можете легко найти все телефоны этого города. Однако в таком справочнике будет весьма трудоёмко найти все телефоны, записанные на определённую фамилию — для этого необходимо посмотреть в секцию каждого города и поискать там нужную фамилию. Некоторые СУБД выполняют эту работу, остальные же просто не используют такой индекс.

Создать индекс

Вы можете создать индексы в SQL с помощью оператора CREATE INDEX.

Синтаксис

Синтаксис CREATE INDEX в SQL.

CREATE INDEX index_name ON table_name (column1, column2, … column_n);

UNIQUE
Модификатор UNIQUE указывает, что комбинация значений в индексированных столбцах должна быть уникальной
index_name
Имя, которое нужно присвоить индексу
table_name
Имя таблицы, в которой нужно создать индекс
column1, column2, … column_n
Столбцы для использования в индексе

Пример

Рассмотрим пример того, как создать индекс в SQL. Например.

PgSQL

CREATE INDEX websites_idx
ON websites (site_name);

1
2

CREATEINDEXwebsites_idx

ONwebsites(site_name);

В этом примере мы создали индекс для таблицы website, который называется website_idx. Он состоит только из одного поля — поля site_name. Мы также могли бы создать индексы с более чем одним полем, как показано ниже.

PgSQL

CREATE INDEX websites_idx
ON websites (site_name, server);

1
2

CREATEINDEXwebsites_idx

ONwebsites(site_name,server);

Это создаст индекс website_idx, который состоит из двух столбцов — site_name и server.

Уникальный индекс

Подобно первичному ключу, уникальный ключ позволяет вам выбрать один столбец или комбинацию столбцов, которые должны быть уникальными для каждой записи. Хотя у вас может быть только один первичный ключ для таблицы, вы можете создать столько уникальных индексов для таблицы, сколько вам нужно. Чтобы создать уникальный индекс для таблицы, вам нужно указать ключевое слово UNIQUE в операторе CREATE INDEX. Например.

PgSQL

CREATE UNIQUE INDEX websites_idx
ON websites (site_name);

1
2

CREATEUNIQUEINDEXwebsites_idx

ONwebsites(site_name);

При этом будет создан уникальный индекс в поле site_name, так что это поле всегда должно содержать уникальное значение без дубликатов. Это отличный способ обеспечить целостность вашей базы данных, если вам требуются уникальные значения в столбцах, которые не являются частью вашего первичного ключа.

РазрешенияPermissions

Требует разрешения CREATE TYPE в текущей базе данных и разрешения ALTER для схемы schema_name.Requires CREATE TYPE permission in the current database and ALTER permission on schema_name. Если аргумент schema_name не указан, в действие вступают принимаемые по умолчанию правила разрешения имен с целью определения схемы для текущего пользователя.If schema_name is not specified, the default name resolution rules for determining the schema for the current user apply. Если аргумент assembly_name указан, пользователь должен либо быть владельцем данной сборки, либо иметь разрешение REFERENCES для работы с ней.If assembly_name is specified, a user must either own the assembly or have REFERENCES permission on it.

Если какие-либо столбцы в инструкции CREATE TABLE определены как принадлежащие к определяемому пользователем типу данных, необходимо иметь разрешение REFERENCES на него.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

Примечание

После создания таблицы со столбцом, который использует определяемый пользователем тип, потребуется разрешение REFERENCES для работы с такими типами.A user creating a table with a column that uses a user-defined type needs the REFERENCES permission on the user-defined type.
Если эта таблица должна создаваться в базе данных TempDB, либо разрешение REFERENCES должно предоставляться явным образом перед каждой процедурой создания таблицы, либо этот тип данных и разрешения REFERENCES нужно добавить в базу данных модели.If this table must be created in TempDB, then either the REFERENCES permission needs to be granted explicitly each time before the table is created, or this data type and REFERENCES permissions need to be added to the Model database. В таком случае этот тип данных и разрешения будут всегда доступны в базе данных TempDB.If this is done, then this data type and permissions will be available in TempDB permanently. В противном случае определяемый пользователем тип данных и разрешения нельзя будет использовать после перезапуска SQL Server.Otherwise, the user-defined data type and permissions will disappear when SQL Server is restarted. Дополнительные сведения см. в разделе .For more information, see

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector