SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.11.2009 16:55:12

vencendor
Участник
Зарегистрирован: 04.11.2009
Сообщений: 3

Что лучше использовать Enum('yes','no') или timyint(1) ?

Что лучше использовать Enum('yes','no') или timyint(1) ?
для использования в полях где есть только 2 значения. Что более хорошо с точки зрения скорости работы и удобности использования.

Заранее спасибо за внятные мнения и ответы!

Неактивен

 

#2 05.11.2009 13:37:53

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Что лучше использовать Enum('yes','no') или timyint(1) ?

BIT(1) smile
Если таких полей несколько, то они будут паковаться в один байт.

ENUM хорошо использовать тогда, когда приложению удобно обращаться
к значениям поля по имени. В случае с битовым полем — по-моему,
удобство сомнительное smile

Неактивен

 

#3 05.11.2009 13:39:30

vencendor
Участник
Зарегистрирован: 04.11.2009
Сообщений: 3

Re: Что лучше использовать Enum('yes','no') или timyint(1) ?

А если посмотреть на эту проблему с точки зрения производительности ?
что будет работать быстрее ?

Отредактированно vencendor (05.11.2009 13:39:56)

Неактивен

 

#4 05.11.2009 13:56:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Что лучше использовать Enum('yes','no') или timyint(1) ?

Если Вы собираетесь выбирать по этому полю, то пересмотрите архитектуру
программы smile

Бинарные поля не могут быть селективными из-за количества значений, выбрать
половину строк последовательно всегда быстрее, чем по индексу. Разницы
в производительности при сравнении в процессоре Вы не заметите как бы Вы
ни старались smile

Неактивен

 

#5 05.11.2009 14:02:59

vencendor
Участник
Зарегистрирован: 04.11.2009
Сообщений: 3

Re: Что лучше использовать Enum('yes','no') или timyint(1) ?

Тогда в нашей битве выигрывает enum('yes','no') поскольку с точки зрения производительности этот подход не уступает зато имеет несколько преимушеств
1. можно эмулировать использование конкурента smile enum('1','0');
2. Позволяет при надобности расширить спектр возможных значений: enum('yes','no','mayby');
3. Позволяет обращаться к полям по более дружественному интерфейсу enable='yes'

я прав ?

Неактивен

 

#6 05.11.2009 15:07:56

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Что лучше использовать Enum('yes','no') или timyint(1) ?

Смотря чего Вы хотите добиться smile Если сделать дружественный интерфейс из
двух элементов, то да smile

Неактивен

 

#7 03.12.2009 17:19:47

denisimus
Участник
Зарегистрирован: 30.10.2008
Сообщений: 18

Re: Что лучше использовать Enum('yes','no') или timyint(1) ?

На мой взгляд для производительности нет ни какой разницы между Enum и Tinyint, т.к. Enum значения хранятся в цифровом виде.
И когда выбираешь по enum полю enable='yes' значение yes приводится мускулом к тому числу с которое задано для yes в enum последовательности и дальше все происходит как при обычном поиске по полю tinyint(1). Не думаю что это сложная операция по строке определить цифру.
Единственное на ч то стоит обратить внимание это объем занимаемых данных полем, для tinyini это всегда 1 байт при диапазоне хранимых чисел от -128 до 127
Для enum может быть 1 или 2 байта в зависимости от числа допустимых значений. Почемуто думаю, что до 256 значений оно будет занимать 1 байт wink, дальше 2 байта

Отредактированно denisimus (03.12.2009 17:21:41)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson