|
|
|
Оптимизация сложного запроса
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Уважаемы Форумчане. Я на сайте использую для пользователей некоторое голосование, друг за друга. Суть запроса выбрать из базы данных 2 пользователей за которых текущий еще не голосовал. поля: `user` - таблица с информацией о пользователях `user_rate` - результаты голосования `user_rate`.`sender_id` - здесь ID голосуещего `user_rate`.`page_id` - здесь ID за кого голосуют `user_rate`.`cool_to` - здесь ID второго оппонента Если в таблице `user_rate` в поле `sender_id` равным 'id_текущего_пользователя' мало записей, то запрос выполняется с приемлемой скоростью, но с увлечением количества записей, увеличивается и скорость выполнения, замеченный мною максимум составляет 6 секунд!! O_O Результат такого запроса - это два поля с записями двух ID Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 12:55:08 |
|
||
|
Оптимизация сложного запроса
|
|||
|---|---|---|---|
|
#18+
Что значит "второй оппонент"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 13:01:38 |
|
||
|
Оптимизация сложного запроса
|
|||
|---|---|---|---|
|
#18+
чего-то вы наворотили... если вся задача в том, чтобы AKB2выбрать из базы данных 2 пользователей за которых текущий еще не голосовал., и AKB2`user_rate`.`sender_id` - здесь ID голосуещего `user_rate`.`page_id` - здесь ID за кого голосуют, то это решается вот так Код: sql 1. 2. 3. 4. 5. 6. 7. если версия ниже 5.6, то можно переписать на left join + is null ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2014, 13:01:58 |
|
||
|
Оптимизация сложного запроса
|
|||
|---|---|---|---|
|
#18+
tanglir, Я немного уточню, по полям в таблице `user_rate` id - идентификатор записи (auto_increment) sender_id - ID того кто голосует page_id - ID пользователя за которого голосующий (sender_id) проголосовал cool_to - ID пользователя с кем сравнивали первого (page_id) В общем Вы авторизуетесь на странице и на спец. странице Вам предлагают выбрать кто из двух других пользователей, которые должны выбираться рандомно, круче. И вы выбираете, голос учитывается и за того, за кого проголосовали получает +1 к рейтингу, второй ничего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2014, 19:05:04 |
|
||
|
Оптимизация сложного запроса
|
|||
|---|---|---|---|
|
#18+
tanglir, Спасибо большое, Ваш ответ помог скорость выполнения упала до 0,0021, но только немного пришлось исправить код. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2014, 19:47:14 |
|
||
|
Оптимизация сложного запроса
|
|||
|---|---|---|---|
|
#18+
если версия ниже 5.6, то попробуйте ещё так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. как правило такое быстрее, но в этом случае у меня есть сомнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2014, 08:21:29 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38842717&tid=1833756]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
1786ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 2098ms |

| 0 / 0 |
