MySQL SELECT эффективность - PullRequest
       5

MySQL SELECT эффективность

1 голос
/ 02 августа 2010

Я использую PHP для взаимодействия с базой данных MySQL, и мне было интересно, является ли запрос MySQL с помощью «SELECT * FROM ...» более или менее эффективным, чем «SELECT id FROM ...».

Ответы [ 4 ]

4 голосов
/ 02 августа 2010

Менее эффективно.

Если подумать, SQL отправит все данные для каждой выбранной вами строки.

Представьте, что у вас есть столбец с именем MassiveTextBlock - этостолбец будет включен, когда вы SELECT *, и поэтому SQL придется отправлять все эти данные, когда вам это может не понадобиться.Напротив, SELECT id просто захватывает коллекцию чисел.

0 голосов
/ 02 августа 2010

Это зависит от ваших индексов.

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

Например, если у вас есть индекс для столбца id, и вы выполняете этот запрос:

SELECT id FROM mytable WHERE id>5

Тогда MySQL нужно только читать индекс, и даже не нужно читать строку таблицы,Если, с другой стороны, вы выбираете дополнительные столбцы, например:

SELECT id, name FROM mytable WHERE id>5

Тогда MySQL потребуется прочитать идентификатор из индекса, а затем перейти к строке таблицы, чтобы прочитать столбец имени.

Если, однако, вы читаете столбцы, которые в любом случае не входят в индекс, который вы выбираете, то чтение большего количества столбцов действительно не будет иметь такого большого значения, хотя оно будет иметь небольшое значение.Если некоторые столбцы содержат большой объем данных, например большие столбцы TEXT или BLOB, было бы разумно исключить их, если они вам не нужны.

0 голосов
/ 02 августа 2010

Это будет зависеть от того, почему вы выбираете данные. Если вы пишете необработанный интерфейс базы данных, такой как phpMySQL, это может иметь смысл.

Если вы выполняете несколько запросов к одной и той же таблице с одинаковыми условиями и операциями конкатенации, то SELECT col1, col2 FROM table может иметь больше смысла, чем использование двух независимых SELECT col1 FROM table и SELECT col2 FROM table для получения разных частей одни и те же данные, поскольку они выполняют обе операции в одном запросе.

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

Нет НИКАКОГО СОСТОЯНИЯ, в котором SELECT * неизбежно, но если оно есть, то ваша модель данных, вероятно, имеет некоторые серьезные недостатки проектирования.

0 голосов
/ 02 августа 2010

Это менее эффективно, потому что вы получаете гораздо больше информации, чем просто SELECT id.Кроме того, второй вопрос, скорее всего, будет задан только с помощью индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...