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

Форум MySQL

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

 

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

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

тема: какой тип поля лучше поставить для пароля?
 
 автор: а-я   (18.07.2008 в 01:22)   письмо автору
 
 

есть поле `password`, там возможно только цифры и латинские буквы.
т.е. результат использования функции md5()
весь сайт в UTF-8, сейчас это поле имеет кодировку utf8_bin/ тип поля char(32)
как вы думаете, имеет ли смысл поменять на binary(32)/
или без разницы?

и еще такие вопросы по скорости.
1) Как лучше работать с функцией IN(), если данные надо взять из другой таблицы?

SELECT GROUP_CONCAT(`ID`) as `IDs` FROM `tbl_2` WHERE `ID` > 100

$IDs = ....;

UPDATE `tbl_1` SET `form` = 0 
WHERE `
 ID` IN ('.$IDs.')

ИЛИ

UPDATE `tbl_1` SET `form` = 0 
WHERE 
 `ID` IN (SELECT GROUP_CONCAT(`ID`) FROM `tbl_2` WHERE `ID` > 100)

т.е. делать 2разных запроса. или один?
во втором случаи, я боюсь, что MySQL будет делать каждый раз запрос, чтоб узнать подходит он условие или нет. т.е. 2 таблицу он будет сканировать на каждой строчке из 1ой. или это не так?

2) При записи и обновлении, что быстрее указать DEFAULT или записать известное число?
т.е. допустим, при обновлении счетчиков. надо сбросить все поля на 0.
как лучше?
...`today` = 0... или ...`today` = DEFAULT...

3) Какое поле будет быстрее?
tinyint(1) или ENUM(0,1,2,3,4,5,6,7,8,9)

   
 
 автор: Trianon   (18.07.2008 в 14:24)   письмо автору
 
   для: а-я   (18.07.2008 в 01:22)
 

0. Оставить как есть, а лучше сделать VARCHAR(255)
Врядли у Вас в таблице нет ни одного поля переменной длины. А если есть, смысла ограничивать CHAR'ом поле password нет никакого. Наверняка захотите потом хеш поменять на что-то более приличное.

1.
UPDATE `tbl_1` 
  FROM `tbl_1`  JOIN `tbl_2` USING(`ID`)
SET `form` = 0 

или

UPDATE `tbl_1` 
SET `form` = 0 
  WHERE `ID` IN (SELECT `ID` FROM  `tbl_2`)


2, 3.
б) не стоит пытаться гнаться за скоростью на мелочах вслепую. Обычно получается только хуже.
а) Есть BENCHMARK и EXPLAIN

   
 
 автор: а-я   (19.07.2008 в 09:43)   письмо автору
 
   для: Trianon   (18.07.2008 в 14:24)
 

>0. Оставить как есть, а лучше сделать VARCHAR(255)
> Врядли у Вас в таблице нет ни одного поля переменной длины. А если есть, смысла ограничивать CHAR'ом поле password нет никакого.

Как раз таки таблица имеет фиксированную длину.
И кроме пароля, не имеет больше текстовых полей.
Это что-то вроде счетчика.
Первичный ключ и пароль используется для авторизации.

Наверняка захотите потом хеш поменять на что-то более приличное.
Не понял, на что еще можно поменять ХЭШ? что может быть приличней?

> б) не стоит пытаться гнаться за скоростью на мелочах вслепую. Обычно получается только хуже.
ну, информация лишней не бывает. Просто данная таблица требует большую скорость. Поэтому пытаюсь даже мелочи учесть, хотя бы на данной таблице

   
 
 автор: Trianon   (19.07.2008 в 12:21)   письмо автору
 
   для: а-я   (19.07.2008 в 09:43)
 

>Наверняка захотите потом хеш поменять на что-то более приличное.
>Не понял, на что еще можно поменять ХЭШ? что может быть приличней?
>
имелось в виду - такой хеш, каким является голый md5 без salt .

   
 
 автор: а-я   (19.07.2008 в 12:45)   письмо автору
 
   для: Trianon   (19.07.2008 в 12:21)
 

>имелось в виду - такой хеш, каким является голый md5 без salt .

Честно сказать "md5 без salt" - меня поставил в тупик. Открыл снова руководство, но ничего такого там не увидел. =) Только воспользовавшись поиском на форуме понял, о чем вы говорите.
даа.... такого я никогда не делал... т.е. не "солил" перед тем как отдать функции md5()... хехе)
думаю, тоже так стоит поступить. ) Спасибо.

   
 
 автор: mechanic   (23.07.2008 в 11:00)   письмо автору
 
   для: а-я   (18.07.2008 в 01:22)
 

1. я бы написал так
update tbl_1 as t1, tbl_2 as t2 set t1.form = 0 where t1.ID = t2.ID and t2.ID > 100;

ведь как я понял, поля ID в двух таблицах связаны

   
Rambler's Top100
вверх

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