|
|
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
всем привет. потребовалось запустить slow query log и там появился вот такой запрос. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. я в мускуле не особо, но как понимаю этот запрос создает какую-то виртуальную таблицу и потом из нее делает выборку. правильно? вот что explain выдает: +----+-------------+-------+-------+--------------------------+---------+---------+------+--------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+--------------------------+---------+---------+------+--------+-------------+ | 1 | SIMPLE | U | index | ix_b_user_email,email_id | PRIMARY | 4 | NULL | 105296 | Using where | +----+-------------+-------+-------+--------------------------+---------+---------+------+--------+-------------+ то есть этот запрос проверяет 105296 строк. нельзя ли как нибудь сделать так чтоб он использовал идексы, что б его ускорить, или при таком запросе индексы не как не сделаешь и надо переписывать его с использованием временной таблицы например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 10:19:15 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
покажите имеющиеся индексы на таблицу B_USER а вообще LIKE не сначала строки не будет использовать индексы ------- upper('%uggjplove13@gmail.com%') как то надо переделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 10:33:22 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. я добавил на PERSONAL_BIRTHDATE, DATE_REGISTER их не было и добавил составной на email и id. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 10:47:18 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
das-ichдобавил составной на email и id.попробуйте наоборот - на ID, EMAIL. И после создания индекса сделайте OPTIMIZE TABLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 11:32:50 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
das-ichя добавил на PERSONAL_BIRTHDATE, DATE_REGISTERДля показанного запроса они не нужны. Таблица, надеюсь, InnoDB-шная? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 11:33:49 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
надо как-то избавиться от авторLIKE % uggjplove13@gmail.com% . Почему проверка емайла идет с %? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 11:34:59 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
das-ich, все твои предположения -- сразу мимо. по оптимизации: Вот твои условия: Код: sql 1. Эффективно это Код: sql 1. 2. Нахрена так много скобок ставить было ? ни одна не нужна... Два условия, Код: plaintext 1. Оба на EMAIL, первое неселективное наверняка (наверняка поле EMAIL большей частью заполнено), второе -- неоптимизируемо индексом. Индекс надо было бы делать на upper(U.EMAIL), но MySQL не поддерживает индексы на выражения (если поддерживает вдруг в твоей версии -- тогда просто надо создать такой индекс). ИТОГО: два условия отбора, ни одно не оптимизируемо, следовательно, запрос не оптимизируется вообще никак. Как быть: Условие Код: plaintext 1. надо заменять на условие Код: plaintext 1. Т.е. во-первых, надо убрать с EMAIL UPPER(), для этого данные нужно держать в таблице уже преобразованными к какому-то регистру, во вторых, надо сделать условие с LIKE префиксным, а не инфиксным -- убрать в начале '%', потому что только префиксные условия LIKE могут быть оптимизированы с использованием индекса. Как тебе этого добиться -- решай исходя из своей предметной области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 11:35:26 |
|
||
|
mysql slow query
|
|||
|---|---|---|---|
|
#18+
MasterZivНахрена так много скобок ставить было ? ни одна не нужна...Это Битрикс. Он скобки сыпет тоннами. И по этой же причине запрос правке не поддается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2015, 11:42:43 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39040432&tid=1832767]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 327ms |

| 0 / 0 |
