SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 22.04.2008 21:10:45

Sandman
Участник
Зарегистрирован: 22.04.2008
Сообщений: 2

Почему на простых запросах показывает жуткие тормоза?

Ребят, помогите плз, кто с MySQL работает
на простых запросах показывает жуткие тормоза
не могу понять в чем дело

имеетя:

1) таблица список городов: cities (2 миллиона записей)

citynumber int(7)    PRIMARY KEY
cityname varchar(200)    INDEX

2) таблица альтернативные названия городов: cities_alternatenames  (1.8 миллиона записей)

citynumber int(10)        INDEX
alternate_name varchar(200)    INDEX



например в таблице cities есть запись: 2925535 Frankfurt

а в таблице cities_alternatenames:
2925535 Fráncfort
2925535 Frankfurto
2925535 Франкфурт



пробую делать запросы:

q1)
SELECT *
FROM cities
WHERE
cityname = 'Frankfurt'

Query took: 0,0008sec (все путем)
----------------------------------------------------------

q2)
SELECT *
FROM cities
WHERE
citynumber in(2925535, 1234567, 2345678)

Query took: 0,0003sec (все путем)
----------------------------------------------------------

q3)
SELECT citynumber
FROM cities_alternatenames
WHERE alternate_name = 'Frankfurt'

Query took: 0,0008sec (все путем)
----------------------------------------------------------

q4)
SELECT *
FROM cities
WHERE
citynumber in(2925535, 1234567, 2345678)
or
cityname = 'Frankfurt'

Query took: 4sec (с чего бы так долго стало ??? это же q1+q2)
----------------------------------------------------------

q5)
SELECT *
FROM cities
WHERE
citynumber in(SELECT citynumber
FROM cities_alternatenames
WHERE alternate_name = 'Frankfurt'
)
or
cityname = 'Frankfurt'

Query took: 258sec (вапще задница однако !!!)
----------------------------------------------------------

Неактивен

 

#2 22.04.2008 21:22:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Почему на простых запросах показывает жуткие тормоза?

q5 лучше делать JOIN-ом, так как подзапрос может быть неэффективен и выполняться каждый раз при сканировании основной таблицы - эту багу обещают пофиксить в MySQL 6.0.

Сделайте EXPLAIN q4, возможно он делает MERGE ключей.

попробуйте такой вариант

SELECT * FROM (SELECT *
FROM cities
WHERE
citynumber in(2925535, 1234567, 2345678) ) X
WHERE cityname = 'Frankfurt'

Неактивен

 

#3 23.04.2008 15:16:23

Sandman
Участник
Зарегистрирован: 22.04.2008
Сообщений: 2

Re: Почему на простых запросах показывает жуткие тормоза?

rgbeast, пасиб

q4 заменил OR на UNION
q5 JOIN + UNION

все летает
MySQL загадочная СУБД однако

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson