|
|
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Господа, прошу прощения за оффтопик, но проблема критичная и на форуме, я, к сожалению, ответа не нашёл. Есть сложный SELECT, который обрабатывается по-разному на разных версиях баз. mysql-max 3.23 - 0.50 сек mysql-nt 4.0.16 - 17 сек!!! В чём может быть проблема? Заранее спасибо за ответы. Код: plaintext 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. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2004, 03:28 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Заметил ещё одну особенность. Если в условии WHERE 11 таблиц, то запрос выполняется 0.4 сек., если я добавляю в условие 12-ю (причём любую) таблицу, то запрос сразу ежё выполняется 4.5 сек, 13-Ю (тоже любую) - 9.7 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2004, 04:08 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Я бы из общих соображений для начала собрал бы все эти таблички со структурой int(2) varchar(50) в одну. Ввел бы третье поле для дополнительного атрибута (типа что это - цвет, упаковка, полировка-лакировка и т.д.) Скорей всего запрос будет легче бегать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2004, 14:33 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
А как тогда будет выглядеть запрос? Вообще вариантов по снижению количества таблиц много, но ведь и без этого всё должно работать. Но почему-то не работает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2004, 16:07 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Как мне кажется, здесь тормоза из-за перебора всех возможных планов запроса, вот это наводит на такую мысль: meddows если я добавляю в условие 12-ю (причём любую) таблицу, то запрос сразу ежё выполняется 4.5 сек, 13-Ю (тоже любую) - 9.7 и т.д. Это лечится только заменой оптимизатора или уменьшением кол-ва таблиц в запросе. По поводу замены оптимизатора: в PostgreSQL для этих случаев предусмотрен генетический алгоритм, который позволяет обойтись без полного перебора планов. Если таких запросов в приложении предполагается много, подумай о смене СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2004, 16:58 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Оччень сомневаюсь что дело в поиске плана.. Покажте explain пожалуйста.. такие вопросы (быстродействия) вообще должны начинаться с explain и c my.cnf В любом случае план запроса можно подправить как вы хотите с помощью use index, force index, ignore index и тд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2004, 19:55 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
А индексы есть? "Я не разделяю ваших галюцинаций" Геродот Американский. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 00:23 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
ХренПокажте explain пожалуйста.. Кстати правильная мысль... Если сам Explain будет работать долго, значит дело в переборе планов запроса, если отработает быстро --- в чём-то ещё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 00:48 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы и поиск решения. НО, по-моему, ответ следует искать несколько в ином направлении. Данный запрос ЛЕТАЕТ на следующих базах данных, время выполнения – менее 1 секунды: MySQL 3.23, Microsoft Access, Microsoft SQL 2000 и только на MySQL 4.0.16 (Windows) и MySQL 4.0.18 (Unix) он тормозит, причём тормозит конкретно. В Access’e и SQL2000 я индексов вообще не создавал. В MySQL 4.x у меня созданы индексы на каждом PRIMARY поле в таблицах-справочниках. И на самом деле 21 таблица на таком несложном запросе не так уж много и теоретически всё должно работать очень быстро, учитывая ещё и то, что запрос должен вернуть всего 2 записи! К сожалению, если б была возможность сменить СУБД или хотя бы перейти на 3.23 я бы так и сделал, но пока это исключено. Нужно всё заставить работать на mySQL 4.x. My.cnf у меня полностью повторяет my-large.cnf. EXPLAIN привожу ниже. На mySQL 4.x он выполняется настолько же долго насколько и просто SELECT. И ещё раз о скорости… Когда в плане менее 11 таблиц всё работает быстро, как только добавляется 12-ая таблица – скорость выполнения запроса сразу же увеличивается в 10 раз, тринадцатая, четырнадцатая и т.д. таблицы увеличивают каждый из запросов вдвое. Мне кажется, что проблема в самом mySQL, либо в каких-то настройках. Вопрос только в каких. Дело в том, что как я и говорил запрос работает невозможно долго у меня на Windows и на сервере, где стоит Unix. Базы ставили и, возможно, конфигурили абсолютно разные люди. Сомневаюсь, что я и админ сервера изменили «случайно» одну и ту же переменную в настройках. Скорее всего, она по умолчанию проставлена как-то криво. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 14:17 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
meddowsEXPLAIN привожу ниже. На mySQL 4.x он выполняется настолько же долго насколько и просто SELECT. Что и требовалось доказать, дело в переборе планов запроса. Решение: выбрось каку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 16:42 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
А что выбрасывать, если мне все данные нужны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 16:55 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
под "какой" понимается MySQL 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 17:19 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Был бы я админом того сервака, на котором хостюсь - с удовольствием! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 19:44 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
::пожимая плечами:: тогда кушай каку и не жалуйся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 19:58 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Хочется найти решение, а не каку жевать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 21:50 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Решения я здесь вижу 2: 1) перейти с MySQL 4.x на что-нибудь другое (я бы предложил PostgreSQL, причину см. выше в треде, хостер наверняка его предоставляет). 2) уменьшить количество таблиц в запросе. Есть ещё вариант 3: оставить всё как есть, сесть в позу лотоса и читать мантру "MySQL не может тормозить" до наступления просветления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 00:56 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Смущает то, что на трёшке всё нормально функционирует. Первые 2 варианта, к сожалению, пока отпадают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2004, 03:44 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Действительно трабл :((( 2 meddows Даже если побороть тормоза оптимизатора, я бы все-таки уменьшил кол-во таблиц в запросе. Пока у тебя 22 таблицы с 2 записями каждая - декартово произведение= 4194304, не так много. А если ХОТЯ БЫ по 100 записей - уже 1+Е44 А если каждая вырастет до такой малости как 1000 -1+Е66. Тут по-моему любая субда встанет, хоть бы у них были трижды генетические алгоритмы. 2 Хрен А как такие вещи можно использовать? Как например задать план оптимизации? Пример, если можно. 2 Sad Spirit Ты так часто говоришь про каки. Скажи, тебе нравятся каки, да? Что-то здесь запахло падалью (с) Маугли Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 16:07 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Marat_L Ты так часто говоришь про каки. Скажи, тебе нравятся каки, да? Что-то здесь запахло падалью (с) Маугли я тебя, censored , в этот тред послал, чтоб ты человеку помог (если сможешь, хе-хе), а ты, censored , мне вместо этого хамить начал?.. Что, если вопрос чуть выходит за пределы пересказа мысклёвого мануала, одно слюнобрызгание только и остаётся?.. А у Киплинга мне больше нравится стишок про бремя белого человека: просто таки как я вас тут просвещаю, а мне в ответ ни слова благодарности. Э-эх. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 23:53 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Уйди не жужжи Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 09:14 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
meddows Хмм, тестил на max-nt-4.0.12: время выполнения - 0.0046 сек. Мож, дело в max-версии? Хотя ее отличие только в *DB таблицах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2004, 20:58 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
2 mechanoid Прикольно. Теперь я вообще ничего не понимаю. Две разные базы на разных машинах дают один и тот же результат (тормозной), а твоя 12-ая версия работает нормально... Может она у тебя отконфигурина как-то по-особенному? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2004, 04:12 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
meddows Не, пробовал со стандартным my-large.cnf. Он, кстати, во всех версиях один или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2004, 12:11 |
|
||
|
Невозможно долгая обработка запроса на mysql 4.x
|
|||
|---|---|---|---|
|
#18+
Есть мысль: попробуй запрос переписать с JOIN'ами, а то в твоем SELECT'e производится полное связывание 22 таблиц, что не есть хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2004, 06:21 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32519537&tid=1855072]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 423ms |

| 0 / 0 |
