SQL « Медленно работает UNION

Господа, дайте совет.

У меня запрос:

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .mysql.geshi_code {font-family:monospace;} .mysql.geshi_code .imp {font-weight: bold; color: red;} .mysql.geshi_code .kw1 {color: #990099; font-weight: bold;} .mysql.geshi_code .kw2 {color: #990099; font-weight: bold;} .mysql.geshi_code .kw3 {color: #9900FF; font-weight: bold;} .mysql.geshi_code .kw4 {color: #999900; font-weight: bold;} .mysql.geshi_code .kw5 {color: #999900; font-weight: bold;} .mysql.geshi_code .kw6 {color: #FF9900; font-weight: bold;} .mysql.geshi_code .kw7 {color: #FF9900; font-weight: bold;} .mysql.geshi_code .kw8 {color: #9900FF; font-weight: bold;} .mysql.geshi_code .kw9 {color: #9900FF; font-weight: bold;} .mysql.geshi_code .kw10 {color: #CC0099; font-weight: bold;} .mysql.geshi_code .kw11 {color: #CC0099; font-weight: bold;} .mysql.geshi_code .kw12 {color: #009900;} .mysql.geshi_code .kw13 {color: #000099;} .mysql.geshi_code .kw14 {color: #000099;} .mysql.geshi_code .kw15 {color: #000099;} .mysql.geshi_code .kw16 {color: #000099;} .mysql.geshi_code .kw17 {color: #000099;} .mysql.geshi_code .kw18 {color: #000099;} .mysql.geshi_code .kw19 {color: #000099;} .mysql.geshi_code .kw20 {color: #000099;} .mysql.geshi_code .kw21 {color: #000099;} .mysql.geshi_code .kw22 {color: #000099;} .mysql.geshi_code .kw23 {color: #000099;} .mysql.geshi_code .kw24 {color: #000099;} .mysql.geshi_code .kw25 {color: #000099;} .mysql.geshi_code .kw26 {color: #000099;} .mysql.geshi_code .kw27 {color: #00CC00;} .mysql.geshi_code .coMULTI {color: #808000; font-style: italic;} .mysql.geshi_code .co1 {color: #808080; font-style: italic;} .mysql.geshi_code .co2 {color: #808080; font-style: italic;} .mysql.geshi_code .es0 {color: #004000; font-weight: bold;} .mysql.geshi_code .es1 {color: #008080; font-weight: bold;} .mysql.geshi_code .br0 {color: #FF00FF;} .mysql.geshi_code .sy1 {color: #CC0099;} .mysql.geshi_code .sy2 {color: #000033;} .mysql.geshi_code .st0 {color: #008000;} .mysql.geshi_code .nu0 {color: #008080;} .mysql.geshi_code span.xtra { display:block; }

Select man_a FROM peoples_a WHERE man_life=25
UNION (SELECT man_a FROM peoples_b WHERE man_life=25)
ORDER BY  man_age
LIMIT 5

 

Строк примерно 200000.
Выполняется крайне медленно. До 10 секунд.

Я чуть чуть упростил sql, а так он идёт с JOIN с другими таблицами. 3-4 штуки.

Индексы стоят везде и стоят верно.
EXPLAIN=>
Как правило выдает eq_ref или ref.
Но на UNION выдаёт ALL.


Как можно было бы перефразировать запрос на выборку из двух таблиц?

Очень важно что бы было отсортировано по man_age.

Если делать двумя запросами то получится что:

А- запрос вернёт:
1
2
3
4

Б- запрос вернёт:
1
2
3
4

А надо что бы было:
1
1
2
2
3
3
4
4

1 ответов



  SELECT * FROM
  (
    SELECT  * FROM
    (
      Select man_a
      FROM peoples_a
      WHERE man_life=25 ORDER BY  man_age
      LIMIT 5
    )a
    UNION ALL
    SELECT * FROM
    (
       Select man_a
       FROM  peoples_b
      WHERE man_life=25 ORDER BY  man_age
      LIMIT 5

    )b
  )c ORDER BY man_a

 

Проблема в первоначальном запросе в том, что ORDER BY / LIMIT применяется кo всему результату UNION (который еще перед выдачей результата делает сортировку по man_a, т.к. по умолчанию UNION DISTINCT)