|
|
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Три таблицы: фирмы (firms), журнал заявок (jurnal), поступления (credit) Дамп: Код: plsql 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. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 1. Получаю все данные по всем заявкам и фирмам, количество заявок, количество поступлений и их суммы 1 запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Результат 1:n_shortcount_zayavsum_zayavcount_postsum_postdebetЗападная компания46046.2046046.200.00Северная компания6729422.4258438462.48290959.94Восточная компания350330.72833503.8416826.88Южная компания427820.2049583.9818236.22Северо-Восточная компания15384.1600.005384.16 2. Получаю количество заявок, поступлений и их суммы для которых debet=0. 2 запрос: Код: plsql 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. Результат 2:n_shortcount_zayavsum_zayavcount_postsum_postЗападная компания46046.2046046.20Северная компания188286.151288286.15Южная компания27583.5237583.52 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 05:01:19 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Даже при беглом взгляде... вот подзапрос первого запроса: Код: sql 1. 2. 3. 4. 5. 6. 7. Расскажите мне, как COUNT(`id`) или SUM(`postup`) могут оказаться NULL, если оба поля NOT NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 08:59:17 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Akina, дык, ON cred.`id_jur`=jurnal.`id` - если не найдены поступления для заявок. Для этого там добавлены поля id_jur и id_firm ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:16:26 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
AlexSes , это происходит во внешнем запросе, когда результат подзапроса уже материализован. Да и во внешнем запросе в выражении Код: sql 1. внешний IFNULL лишний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:44:30 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
авторвнешний IFNULL лишний тогда так: SUM(`sumdoc`)-IFNULL(cred.`sumpost`,0), иначе в результ. таблице будет пустое поле имхо, решил подстраховаться, если есть вероятность возвращения рез-та NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:50:26 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
исправил: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:51:58 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
во втором тоже убрал лишний IFNULL Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 09:58:16 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
точнее, IFNULL во втором запросе вообще лишние.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2015, 10:10:02 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
спасибо, Akina! Ну, а в остальном улучшить уже особенно нечего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 03:20:13 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы понять, есть ли что оптимизировать, нужны: 1) DDL всех таблиц; 2) запрос (с указанием псевдонимов таблиц для каждого поля); 3) EXPLAIN этого запроса. Также желательны сведения о данных, включая вариативность по полям связывания и отбора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 09:03:40 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
1. авторDDL всех таблиц; Дамп в первом посте это не то? 2. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 3. EXPLAIN вышеприведенного запроса (вижу ALL, совсем не радует): id select_type table type possible_keys key key_len ref rows Extra1 PRIMARY company ALL PRIMARY 7 Using temporary; Using filesort1 PRIMARY zayavka ref id_firm id_firm 4 reestrz.company.id 1 1 PRIMARY ALL 4 2 DERIVED post index id_firm 4 74 По последнему не совсем понял, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 12:25:51 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Снова вернёмся к подзапросу: Код: sql 1. 2. 3. 4. 5. 6. Посмотрим на структуру таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. В запросе выполняется группировка по id_firm. В то же время в выходном наборе присутствует поле id_jur, которое не задействовано в групповой функции и не используется как поле группировки. Вариантов два. Первый - каждому значению id_firm соответствует строго одно значение id_jur. Тогда непонятно, почему id_jur не включено в выражение группировки. А равно непонятно, как при этом отслеживается целостность и непротиворечивость данных (если это происходит на уровне клиента - то оно бессмысленно). Второй - каждому значению id_firm соответствует несколько различных значений id_jur. Тогда в выходной набор попадает одно из них, причём случайное. Но ведь это поле выходного набора используется во внешнем запросе для связывания... вообще бред получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 12:53:33 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, поле id_jur попало в подзапрос случайно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 14:19:29 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
AlexSesПрошу прощения, поле id_jur попало в подзапрос случайно да? я а вижу снаружи Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 14:22:59 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
Нет, кажется я что-то напутал. Так же должно быть Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 14:26:17 |
|
||
|
Помогите оптимизировать запросы
|
|||
|---|---|---|---|
|
#18+
По-моему опять не так. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2015, 14:30:18 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1832810]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 353ms |

| 0 / 0 |
