Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: varchar(10)
 
 автор: Дмитрий Смаль   (14.12.2009 в 00:14)   письмо автору
 
 

вот упрощённая структура таблицы с юзерами
CREATE TABLE `user` (
  `id` mediumint(11) unsigned NOT NULL auto_increment,
  `date` datetime NOT NULL,
  `login` varchar(10) collate utf8_unicode_ci default NULL,
  `login_id` int(10) unsigned default '0',
  `password` varchar(32) collate utf8_unicode_ci default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `login` (`login`),
  KEY `date` (`date`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=0 AUTO_INCREMENT=1 ;

date - дата гегистрации
login_id - это crc32('login')

условие:
пользователей около миллиона,
1 запрос - "SELECT * FROM `user` WHERE `login_id`=CRC32('$login') AND `login`='$login'"
2 запрос - "SELECT * FROM `user` WHERE `login`='$login'"

вопрос:
- на сколько 2 запрос медленнее работает чем первый?
- вообще стоит ли использовать столбе `login_id`?
- я понимаю что когда пользователей на сайте пару сотен или тысяч то такой столбец не нужен, а вот с какого количества пользователей стоит использовать столбец `login_id`?

  Ответить  
 
 автор: Trianon   (14.12.2009 в 00:24)   письмо автору
 
   для: Дмитрий Смаль   (14.12.2009 в 00:14)
 

Запрос 2 будет работать быстрее ровно на время вычисления значения crc32 и сравнения вычисленного значения с полем.

  Ответить  
 
 автор: Дмитрий Смаль   (14.12.2009 в 11:07)   письмо автору
 
   для: Trianon   (14.12.2009 в 00:24)
 

хм.. остается проверить только опытным путём

  Ответить  
 
 автор: Trianon   (14.12.2009 в 11:41)   письмо автору
 
   для: Дмитрий Смаль   (14.12.2009 в 11:07)
 

Вычисление полинома так на так придется выполнить.
Вычисленное значение потребуется отыскать. Если бы уникальный индекс на поле login не стоял, это потребовало бы сканирования всей таблицы. А так, наверняка, сервер оптимизирует поиск, обратившись к индексу. Но выполнить сравнение всё равно придется.

  Ответить  
 
 автор: а-я   (16.12.2009 в 23:09)   письмо автору
 
   для: Дмитрий Смаль   (14.12.2009 в 00:14)
 

а если:


CREATE TABLE `user` ( 
  `id` mediumint(11) unsigned NOT NULL auto_increment, 
  `date` datetime NOT NULL, 
  `login` varchar(10) collate utf8_unicode_ci default NULL, 
  `login_id` int(10) default '0', 
  `password` varchar(32) collate utf8_unicode_ci default NULL, 
  PRIMARY KEY  (`id`), 
  UNIQUE KEY `login` (`login_id`,`login`), 
  KEY `date` (`date`) 
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci PACK_KEYS=0 AUTO_INCREMENT=1 ;



"SELECT * FROM `user` WHERE `login_id`=".CRC32($login)." AND `login`='$login'"

  Ответить  
 
 автор: Trianon   (16.12.2009 в 23:27)   письмо автору
 
   для: а-я   (16.12.2009 в 23:09)
 

>UNIQUE KEY `login` (`login_id`,`login`),

Так не делают!

[поправлено модератором]

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования