SQL Server: нормальный индекс по сравнению с полнотекстовым индексом

  • OpenID - это открытый стандарт и децентрализованный протокол аутентификации, управляемый OpenID Foundation.
  • OAuth является открытым стандартом для делегирования доступа.
  • OpenID Connect (OIDC) Объединяет функции OpenID и OAuth, т. Е. Выполняет аутентификацию и авторизацию.
  • OpenID принимают форму уникального URI , управляемого некоторым «провайдером OpenID», то есть провайдером идентификации (idP).

    OAuth можно использовать вместе с XACML, где OAuth используется для согласия на владение и делегирования доступа, тогда как XACML используется для определения политик авторизации.

    OIDC использует простые веб-токены JSON (JWT), которые можно получить с помощью потоков, соответствующих спецификациям OAuth 2.0 . OAuth имеет прямое отношение к OIDC , поскольку OIDC является уровнем аутентификации, построенным на основе OAuth 2.0 .

    enter image description here

    Например, , если вы решили войти в Auth0 , используя свою учетную запись Google, то вы используется OIDC . После успешной аутентификации в Google и авторизации Auth0 для доступа к вашей информации, Google отправит обратно в Auth0 информацию о пользователе и выполненной аутентификации. Эта информация возвращается в веб-токене JSON (JWT). Вы получите токен доступа и, если потребуется, идентификационный токен. Типы токенов : Источник: OpenID Connect

    Аналогия :
    Организация использует ID-карту ] для целей идентификации и содержит микросхемы, в нем хранятся сведения о сотруднике, а также авторизация , то есть доступ к кампусу / шлюзу / ODC. ID-карта действует как OIDC и Чип действует как OAuth . больше примеров и формы вики

18
задан John Saunders 23 July 2009 в 19:19
поделиться

3 ответа

Это зависит от типа поиска, который вы хотите выполнить. Например, вы не можете использовать обычный индекс с этим запросом:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE '%' + @SearchText + '%'

Это не sargable . Это возможно, но селективность может быть не очень хорошей:

SELECT * FROM [MyTable] WHERE [MyColumn] LIKE @SearchText + '%'

Вы используете полнотекстовый индекс совершенно по-другому:

SELECT * FROM [MyTable] WHERE CONTAINS([MyColumn], @SearchText)
21
ответ дан 30 November 2019 в 07:39
поделиться

Из MSDN :

В отличие от полнотекстового поиска, предикат LIKE Transact-SQL работает только с шаблонами символов. Кроме того, вы не можете использовать предикат LIKE для запроса отформатированных двоичных данных. Более того, запрос LIKE к большому количеству неструктурированных текстовых данных выполняется намного медленнее, чем эквивалентный полнотекстовый запрос к тем же данным.

Запрос LIKE к миллионам строк текстовых данных может занять несколько минут; тогда как полнотекстовый запрос может занять несколько секунд или меньше для тех же данных, в зависимости от количества возвращаемых строк.

3
ответ дан 30 November 2019 в 07:39
поделиться

Обычно при поиске с обычным индексом вы можете искать только в одном поле, например, «найти все города, которые начинаются с A» или что-то в этом роде.

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

Кроме того, с обычным поиском вы довольно ограничены в том, что вы можете делать - вы можете искать точное совпадение или просто LIKE - вот и все.

С полным текстом index, вы можете искать словоформы (run, run и т. д.), а также похожие слова, указав свой собственный тезаурус. Вы можете искать на нескольких языках, если это проблема. Вы можете искать записи, содержащие два или более терминов, находящихся «БЛИЖАЙШИМ» друг к другу.

Марк

10
ответ дан 30 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: