|
|
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
Есть табличка юзеров (~20k) и табличка со статистикой по юзерам (1-1) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Запросик выводит ТОП юзеров по рейтингу Код: sql 1. 2. 3. 4. 5. По эксплейну запрос пробегает по всем строкам. Код: sql 1. 2. 3. 4. 5. 6. Возможно ли оптимизировать этот запрос без денормализации данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 01:35:03 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
Вообще я бы не стал утверждать, чтоmiZerattiПо эксплейну запрос пробегает по всем строкам.Судя по тому, что используется индекс {"вал","ид"}, запрос выполняется примерно так: читается таблица "стат"(в порядке индекса), к каждой полученной записи сразу джойнятся соотв.записи из "юзер", и как только таких результирующих записей записей наберётся 20, чтение таблиц прекратится. 20460 - это просто наихудший возможный вариант, сервер ведь не знает, что у вас там 1-1, он подстраховывается на случай, если не всем "стат"ам соответствуют "юзер"ы. PS. Но если очень хочется красивогомалоциферного эксплейна , то можно так: Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 05:52:29 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
tanglir, к сожалению, это будет работать неправильно, если в отсортированом по val списке записи с 15 по 30 будут иметь одинаковое значение val ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 23:13:54 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
miZerattiэто будет работать неправильнокак именно "неправильно"? объясните, в чём будет заключаться разница между "правильным" и "неправильным" результатами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 05:23:47 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
tanglirmiZerattiэто будет работать неправильнокак именно "неправильно"? объясните, в чём будет заключаться разница между "правильным" и "неправильным" результатами? для упрощения возьмем исходную таблицу из 6 строк и запрос с "limit 3": Код: sql 1. 2. 3. 4. 5. 6. 7. 8. (имена повторяются для наглядности сортировки) По вашему алгоритму выберутся строки: Код: sql 1. 2. 3. 4. 5. а нужно: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 00:19:23 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. в "s" выберутся 1,2,3 в запросе, соответственно, выберется именно то, что вы описали как "нужное" с чего вы взяли, что val=3 будет соответствовать "какая-то", а не первая по name запись? на "внешний" ордербай внимательно посмотрите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 05:48:37 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
А, нет, понял. Да, есть такое :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2013, 05:50:18 |
|
||
|
order by по полям из разных таблиц
|
|||
|---|---|---|---|
|
#18+
В мане оптимизации сортировки посвящена обширная статья http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html Пишут что ваш случай подпадает под файлсорт неизбежно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2013, 03:51:47 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38465896&tid=1835708]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 188ms |
| total: | 266ms |

| 0 / 0 |
