Как запрос просматривает базу данных для поиска данных?

Я не нашел много тем в интернете об этом вопросе и очень любопытно, как SQL находит данные. Я понимаю, что SQL пишет на страницы 8KB, но как он просматривает эти страницы, чтобы найти данные, которые запросит запрос. Например…

SELECT FirstName, LastName, City, State 
FROM dbo.tblGeneralInfo
WHERE State = 'MI'

Допустим, этот простой запрос не имеет индексов. Теперь, как он находит страницу с tblGeneralInfoданными?

Когда он находит эту таблицу, как он просматривает эти данные? Просматривает ли он все атрибуты столбцов, пока не найдет «состояние», а затем просматривает данные» состояние»? Или он продолжает тщательно просматривать все столбцы, пока не достигнет последнего столбца таблицы и не вернется к столбцу «состояние» и не просмотрит каждую строку в столбце? Ты понимаешь, к чему я клоню? Спасибо!

1 ответ

  1. Если он не индексируется, то в вашем случае он перейдет к столбцу state и выполнит полное сканирование столбца и вытащит любую запись, которая имеет значение MI в столбце state. Однако это может быть очень неэффективно, и было бы лучше поместить индекс на столбец состояния, предполагая, что вы используете этот столбец в основном или частично для поиска. Если он индексируется, SQL сможет перейти прямо к нужным ему записям.

    Скажем, у вас есть 12-томный набор энциклопедии Britanica, и вам нужно найти, какой Том и страница, которая имеет королеву Елизавету в нем. Вы могли бы увянуть начать с первого тома и посмотреть на каждую страницу книги, а затем продолжать идти, пока не найдете королеву Елизавету я предполагаю, около 7000+ страниц. Или вы можете взять книгу индекса найти, где королева Елизавета и перейти к точному объему и точной странице, где она находится. Сэкономив вам пару часов поиска. SQL Server и индексы в целом работают одинаково.