|
|
|
| есть поле `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) | |
|
|
|
|
|
|
|
для: а-я
(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 | |
|
|
|
|
|
|
|
для: Trianon
(18.07.2008 в 14:24)
| | >0. Оставить как есть, а лучше сделать VARCHAR(255)
> Врядли у Вас в таблице нет ни одного поля переменной длины. А если есть, смысла ограничивать CHAR'ом поле password нет никакого.
Как раз таки таблица имеет фиксированную длину.
И кроме пароля, не имеет больше текстовых полей.
Это что-то вроде счетчика.
Первичный ключ и пароль используется для авторизации.
Наверняка захотите потом хеш поменять на что-то более приличное.
Не понял, на что еще можно поменять ХЭШ? что может быть приличней?
> б) не стоит пытаться гнаться за скоростью на мелочах вслепую. Обычно получается только хуже.
ну, информация лишней не бывает. Просто данная таблица требует большую скорость. Поэтому пытаюсь даже мелочи учесть, хотя бы на данной таблице | |
|
|
|
|
|
|
|
для: а-я
(19.07.2008 в 09:43)
| | >Наверняка захотите потом хеш поменять на что-то более приличное.
>Не понял, на что еще можно поменять ХЭШ? что может быть приличней?
>
имелось в виду - такой хеш, каким является голый md5 без salt . | |
|
|
|
|
|
|
|
для: Trianon
(19.07.2008 в 12:21)
| | >имелось в виду - такой хеш, каким является голый md5 без salt .
Честно сказать "md5 без salt" - меня поставил в тупик. Открыл снова руководство, но ничего такого там не увидел. =) Только воспользовавшись поиском на форуме понял, о чем вы говорите.
даа.... такого я никогда не делал... т.е. не "солил" перед тем как отдать функции md5()... хехе)
думаю, тоже так стоит поступить. ) Спасибо. | |
|
|
|
|
|
|
|
для: а-я
(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 в двух таблицах связаны | |
|
|
|