Вопрос про запрос MySQL

antono
На сайте с 12.07.2004
Offline
294
1367

Как быстрее будет работать запрос - если выборку делать по полю с числовым форматом (int) или по полю с символьным форматом varchar(20)? Думаю что по числовому полю быстрее, но может быть одинаково?

M
На сайте с 12.05.2005
Offline
133
#1
antono:
Как быстрее будет работать запрос - если выборку делать по полю с числовым форматом (int) или по полю с символьным форматом varchar(20)? Думаю что по числовому полю быстрее, но может быть одинаково?

Всё зависит не от типа поля (хотя от него тоже) а от объёма, наличия и состава индекса

antono
На сайте с 12.07.2004
Offline
294
#2

Таблица одна. Есть поле с числовым форматом, там простые цифры (10, 55, 47 и т.д.) и есть символьное поле, латинский алфавит, длина 10-15 символов. Чтобы получить числовое значение нужно дополнительно делать к базе запрос, символьное значение уже имеется, вот я и думаю, по символьному полю делать выборку или по числовому, но с доп.запросом к базе. Если скорость выборки по числу и по символам одинаковая, то не нужно будет делать лишний запрос к базе.

[Удален]
#3

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

А
На сайте с 29.07.2003
Offline
58
#4
Scaramush:
antono, по символьному получится быстрее в данном случае. Дополнительный запрос не желателен.

Далеко не факт.

Описание таблицы в студию + кол-во данных + больше информации о запросе, плз.

antono
На сайте с 12.07.2004
Offline
294
#5

Вот подробней:

1 колонка это ID строчек - 1, 2, 3, 4 и т.д.

2 колонка название (names) на английсвом - stol, avto, neon, mama и т.д.

Как эффективней все строчки выбрать например с названием avto, так:

$query = "SELECT * FROM table WHERE ID=2";

или так:

$query = "SELECT * FROM table WHERE names='avto'";

???????

или по производительности оба варианта одинаковы?

[Удален]
#6

Советую привести БД к третьей нормальной форме, тогда все будет быстро ;)

А
На сайте с 29.07.2003
Offline
58
#7

А то что 2 это avto - узнавать ненужно? :) Тогда конечно же WHERE ID=2 быстрее.

Дайте вывод запросов

explain SELECT * FROM table WHERE ID=2

explain SELECT * FROM table WHERE names='avto'

antono
На сайте с 12.07.2004
Offline
294
#8
Альен:
А то что 2 это avto - узнавать ненужно? :)
'

нужно, но из небольшой таблички, а основная будет очень большая.

K. Ermakov
На сайте с 10.12.2004
Offline
328
#9
antono:
нужно, но из небольшой таблички, а основная будет очень большая

Всё новые и новые подробности открываются.

Я вот что думаю - попробуйте измерить время выполнения скрипта при обоих вариантах реализации. Ответите после этого сами на свой вопрос.

С уважением, Константин Ермаков, absite.ru: онлайн кроссворды (http://absite.ru/); searchsuggest.ru: поисковые подсказки доставляют (http://searchsuggest.ru/).
M
На сайте с 12.05.2005
Offline
133
#10
antono:
$query = "SELECT * FROM table WHERE ID=2";
или так:
$query = "SELECT * FROM table WHERE names='avto'";
или по производительности оба варианта одинаковы?

А что мешает сделать в один запрос..например неизвестная таблица называется T1hf, где T1hf.code - связь с `table`

SELECT * FROM `T1hf` AS T1 INNER JOIN `table` AS T2 ON T2.id=T1.code

WHERE T1.id = 'входное целое'

это однозначно быстрее чем 2 запроса, тем более T2.id - primary key (а данных в таблице много ...)

Да и вообще, правильно Вам сказали, нормализуйте модель, добавте поле code в таблицу `table`, сформируйте индекс....

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий