Что такое Поиск Закладки в SQL-сервере?

Вы используете плохие команды async/await. И если честно, они вам здесь не нужны.

router.post('/', [
  check('username', 'Min 5 chars, Max 20').isLength({ min: 5, max: 20 }),
  check('email').custom(value => {
      const db = require('../db');
      return new Promise((resolve, reject) => {
          db.query('SELECT id FROM users WHERE email=?', [value], function (err, results, fields) {
             if (err)
                reject(err)
             if (results.length>0)
                reject(new Error('Email Already exists'))
             resolve()
          })
       })

  }),
], function(req, res, next) {

  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }
19
задан Andomar 11 May 2009 в 22:59
поделиться

3 ответа

A bookmark lookup is the process of finding the actual data in the SQL table, based on an entry found in a non-clustered index.

When you search for a value in a non-clustered index, and your query needs more fields than are part of the index leaf node (all the index fields, plus any possible INCLUDE columns), then SQL Server needs to go retrieve the actual data page(s) - that's what's called a bookmark lookup.

In some cases, that's really the only way to go - only if your query would require just one more field (not a whole bunch of 'em), it might be a good idea to INCLUDE that field in the non-clustered index. In that case, the leaf-level node of the non-clustered index would contain all fields needed to satisfy your query (a "covering" index), and thus a bookmark lookup wouldn't be necessary anymore.

Marc

31
ответ дан 30 November 2019 в 03:34
поделиться

Это NESTED LOOP , который объединяет некластеризованный индекс с самой таблицей в указателе строки.

Происходит для таких запросов:

SELECT  col1
FROM    table
WHERE   col2 BETWEEN 1 AND 10

, если у вас есть индекс на col2 .

Индекс на col2 содержит указатели на индексированные строки.

Итак, для получения значения col1 , движку необходимо отсканировать индекс на col2 для значений ключа от 1 до 10 , и для каждого индексного листа, обратитесь к таблице сам с помощью указателя, содержащегося в листе, чтобы выяснить значение col1 .

В этой статье указывается, что Поиск закладок является SQL Server 2000 Термин , который заменяется на NESTED LOOP 'между индексом и таблицей в SQL Server 2005 и выше

4
ответ дан 30 November 2019 в 03:34
поделиться

Из MSDN относительно поиска закладок:

Оператор поиска закладок использует закладка (идентификатор строки или ключ кластеризации) для найдите соответствующий ряд в таблица или кластерный индекс. Аргумент столбец содержит метку закладки используется для поиска строки в таблице или кластерный индекс. Аргумент столбец также содержит название таблица или кластерный индекс, в котором ряд посмотрел вверх. Если С ПРЕДЫДУЩИМ пункт появляется в столбце Аргумент, обработчик запросов определил что оптимально использовать асинхронный предварительная выборка (чтение вперед) при поиске до закладки в таблице или кластере index.

2
ответ дан 30 November 2019 в 03:34
поделиться
Другие вопросы по тегам:

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