|
|
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Есть две таблички - покупатели и приход/расход с кучей записей каждому покупателю. Необходимо выбрать всех покупателей, у которых общая сумма больше определённого числа. Т.к. что такое оптимизация не представляю вообще, то хотелось бы проконсультироваться, как лучше делать. 1. select distinct a.name from customers a,prihod b where a.id_cust=b.id_cust group by a.name having sum(sumn)>5000 2. select a.name from customers a,(select id_cust from prihod b group by id_cust having sum(sumn)>5000) b where a.id_cust=b.id_cust 3. select a.name from customers a where exists (select * from (select id_cust from prihod b group by id_cust having sum(sumn)>5000) b where a.id_cust=b.id_cust ) 4. select a.name from customers a where exists ( select id_cust from customers b where a.id_cust=b.id_cust group by id_cust having sum(sumn)>5000 ) С каждым разом всё шустрее и шустрее:) Мысли по этому поводу имеются, но хотелось бы услышать ответ профессионалов. Чем можно анализировать запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 11:35 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
>Чем можно анализировать запросы? Обычно для этого используют ExplainPlan Хотя неплохо было бы перед _началом_ оптимизации почитать про подсказки оптимизатору..... хотя бы... для _начала_ ;-P ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:05 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Вот посмотри что у меня получилось: Код: 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. Я выбрал первый вариант. 4-й и третий отпадают сразу, т.к. полностью сканируют таблицу клиентов. >>Чем можно анализировать запросы? Можно использовать SET AUTOTRACE ON в SQL*Plus Или графическими инструментами OraTools,Develope. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:10 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
а скорость от 1 к 4 наоборот уменьшается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:16 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
>>а скорость от 1 к 4 наоборот уменьшается... А сколько в таблице записей? Ты наверное эксперементируеш с почти пустой таблицей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:22 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
> Чем можно анализировать запросы? Секундомером. Еще вариант select a.name from customers a where id_cust in ( select id_cust from customers b group by id_cust having sum(sumn)>5000 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:32 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Пардон. Облажался. Вот так select a.name from customers a where id_cust in (select id_cust from prihod b group by id_cust having sum(sumn)>5000) b ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:35 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Вобщем я проверил: Внес данные в таблицы в клиентов 10000 строк в прихо 2000. Первые запросы отработали мгновенно timing показал следующее Вариант1 Выбрано 291 записть истенное время: 351 Вариант2 Выбрано 291 записть истенное время: 331 Вариант3 Выбрано 291 записть истенное время: 66366 Вариант3 Выбрано 291 записть истенное время: 66927 3 и 4 варианты зависали(круто). Вот тебе ответ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 12:39 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Наверное я бредить начал. 10000/120000 1) 2.1 2) 1.8 3) 1.1 4) 0.6 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 13:02 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Я думаю что все зависит от числа Т. Если большинство клиетов имеют сумму больше чем Т, то понятно что полное сканирование подойдет больше. Все зависит от процента выбора. У меня ситуация всего 1000 клиентов , выбираются 300 -3%. Использование индекса приводет к повышению производительности. Какой процент выборки у Вас? поэксперементируйте с Т. Желаю удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 13:25 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
customers -10682 prihod - 118353 5000р - 66% 7000р - 37% Со временем ситуация не меняется С удивлением для себя обнаружил индекс по id_cust в приходе. Может это влияет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 13:35 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Для просмотра по индексу твои проценты слишком велики!!! Похорошему это должно быть до 6%, при дополнительных условиях до 15%. Индекс понятно влияет, но в Вашем случае с высоким поцентом выборки он мешает!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 14:01 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
Откуда ж ноги растут... Well, тогда как по explain plan оценивать трудоёмкость? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 14:14 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
см. Performance Tuning Guide and Reference Oracle Part II Глава 9 Using Explain Plan ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 14:20 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
а ссылочку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 14:48 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
извиняюсь http://download-west.oracle.com/docs/cd/A97630_01/server.920/a96533/ex_plan.htm#19259 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 14:55 |
|
||
|
Оптимизация. Начало:)
|
|||
|---|---|---|---|
|
#18+
thanks. Я там зареганым даже оказался:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2003, 15:04 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32088236&tid=1992251]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
135ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 463ms |

| 0 / 0 |
