FiRеFоX
V.I.P.
- Регистрация
- 07.08.2010
- Сообщения
- 744
Таблица chat:
Собственно поля:
id_room - номер комнаты чата от 1 до 5
id_login - id юзера из основной таблицы (это автор поста)
id_login_from - id юзера из основной таблицы (кому адресовано сообщение), если никому, то 0
privat - 1 - написано приватно какому-то игроку, чтобы никто не видел, 0 - в общий чат
Такой вот запрос получается:
Запрос выбирает посты из комнаты 1 и показывает приватные сообщения юзеру 1, а также сообщения в общую комнату. Последние.
При ~400.000 строк запрос выполняется ~ 1.5сек - 2сек. Вобщем очень долго. Если убрать order by, то ещё более менее нормально.
Может что-то нужно переделать, изменить? Подскажите)
Код:
CREATE TABLE `chat` (
`id` MEDIUMINT( 9 ) NOT NULL AUTO_INCREMENT ,
`id_room` TINYINT( 4 ) NOT NULL ,
`id_login` MEDIUMINT( 9 ) NOT NULL ,
`id_login_from` MEDIUMINT( 9 ) NOT NULL ,
`privat` TINYINT( 4 ) NOT NULL ,
`text` CHAR( 255 ) NOT NULL ,
`data` INT( 11 ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
KEY `data` ( `data` ) ,
KEY `id_room` ( `id_room` )
) ENGINE = MYISAM DEFAULT CHARSET = utf8;
id_room - номер комнаты чата от 1 до 5
id_login - id юзера из основной таблицы (это автор поста)
id_login_from - id юзера из основной таблицы (кому адресовано сообщение), если никому, то 0
privat - 1 - написано приватно какому-то игроку, чтобы никто не видел, 0 - в общий чат
Такой вот запрос получается:
Код:
SELECT
`chat`.`id` as `id_post`, `user`.`login`, `user`.`data_color_nick`, `user`.`id_color_nick`, `chat`.`id_login`, `chat`.`text`, `chat`.`privat`, `chat`.`id_login_from`, `otvet`.`login` as `login_komu`, `chat`.`data`
FROM `chat`
LEFT JOIN `user` ON `chat`.`id_login` = `user`.`id`
LEFT JOIN `user` as `otvet` ON `chat`.`id_login_from` = `otvet`.`id`
WHERE `chat`.`id_room` = 1 AND (`chat`.`id_login` = 1 OR `chat`.`privat` = 0 OR `chat`.`id_login_from` = 1)
ORDER BY `chat`.`id` DESC LIMIT 0, 15
При ~400.000 строк запрос выполняется ~ 1.5сек - 2сек. Вобщем очень долго. Если убрать order by, то ещё более менее нормально.
Может что-то нужно переделать, изменить? Подскажите)