powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / тормозит запрос...
7 сообщений из 7, страница 1 из 1
тормозит запрос...
    #32216638
gravis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
таблички:

Код: plaintext
1.
2.
3.
4.
5.
TABLE mailmsg (
	id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	id_from INT UNSIGNED NOT NULL REFERENCES mailaddr(id),
	body MEDIUMTEXT,
	INDEX (id_from)
	);


Код: plaintext
1.
2.
3.
4.
TABLE mailaddr (
	id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	addr VARCHAR( 64 ),
	FULLTEXT (addr)
	);


Код: plaintext
1.
2.
3.
4.
5.
TABLE mailto (
	id BIGINT UNSIGNED NOT NULL REFERENCES mailmsg(id),
	id_to INT UNSIGNED NOT NULL REFERENCES mailaddr(id),
	INDEX (id_to),
	INDEX (id)
	);


комплексный запрос:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
mysql> select count(*) from mailmsg
    ->  inner join mailaddr on (mailmsg.id_from=mailaddr.id)
    ->  inner join mailto on (mailto.id=mailmsg.id)
    ->  where mailaddr.addr='xxx@some.ru';

+ ----------+
 
| count(*) |
+ ----------+
 
|         2  |
+ ----------+
 
 1  row in set ( 17 . 67  sec)


explain этого запроса:

Код: plaintext
1.
2.
3.
4.
5.
| table    | type   | possible_keys   | key     | key_len | ref             | rows  | Extra       |
+ ----------+--------+-----------------+---------+---------+-----------------+-------+-------------+
 
| mailto   | index  | id              | id      |        8  | NULL            |  51980  | Using index |
| mailmsg  | eq_ref | PRIMARY,id_from | PRIMARY |        8  | mailto.id       |      1  |             |
| mailaddr | eq_ref | PRIMARY,addr    | PRIMARY |        4  | mailmsg.id_from |      1  | where used  |


отдельные запросы типа
select id from mailaddr where addr='xxx@some.ru';

или

select count(*) from mailmsg where id_from = 26;

выполняются мгновенно... а вот с join'ами тормозит сильно ;/

че делать?
...
Рейтинг: 0 / 0
тормозит запрос...
    #32216737
Parish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у тебя в запросе 5 полей, из них 2 без индекса
...
Рейтинг: 0 / 0
тормозит запрос...
    #32216832
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какие у него без индекса-то? там праймари есть.
может, заменить условие ON на WHERE?
...
Рейтинг: 0 / 0
тормозит запрос...
    #32216859
Zveruga!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделай как напишу и скажи результат потом. У себя я вроде твою ситуцаию смоделировал, должно помочь.

1-ый запрос

select id from mailaddr where mailaddr.addr='xxx@some.ru'

2-ой запрс

select count(*) from mailmsg, mailto
where mailmsg.id_from=$id and mailto.id=mailmsg.id

где $id - результат первого запроса.


один запрос НЕ ВСЕГДА лучше нескольких.
...
Рейтинг: 0 / 0
тормозит запрос...
    #32216888
gravis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оказалось тормоза получаются из за неправильного объединения таблиц
по отдельности, запросы выполняются нормально

наилучший результат получился с объединением только двух таблиц:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select count(mailmsg.id) from mailmsg inner join mailto on mailmsg.id=mailto.id where  (mailmsg.id= 1  or id_to= 1 );

+ -------------------+
 
| count(mailmsg.id) |
+ -------------------+
 
|                190  |
+ -------------------+
 
 1  row in set ( 0 . 32  sec)


но это по-прежнему медленно...
...
Рейтинг: 0 / 0
тормозит запрос...
    #32216921
Zveruga!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
эксплейн твоего последнего запроса покажи
...
Рейтинг: 0 / 0
тормозит запрос...
    #32219404
gravis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
+ ---------+--------+---------------+---------+---------+-----------+-------+-------------------------+
 
| table   | type   | possible_keys | key     | key_len | ref       | rows  | Extra                   |
+ ---------+--------+---------------+---------+---------+-----------+-------+-------------------------+
 
| mailto  | ALL    | id,id_to      | NULL    |    NULL | NULL      |  51981  |                         |
| mailmsg | eq_ref | PRIMARY       | PRIMARY |        8  | mailto.id |      1  | where used; Using index |
+---------+--------+---------------+---------+---------+-----------+-------+-------------------------+
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / тормозит запрос...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]