Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];

Вниз

select, sum как правильней   Найти похожие ветки 

 
dest81   (2011-07-06 16:19) [0]

Усть две таблицы:

1. dogovor
id
name

2. plata
id
id_dg
suma

Как правильнее вывести sum(suma) по каждому договору, и надо что б выводились и те договора по которых непроисходили проплаты (если можно то с нульом).


 
Медвежонок Пятачок ©   (2011-07-06 16:24) [1]

сначала нужно получить сумму, потом париться с вопросом как ее вывести.
для первого пункта нужно выучить sql.


 
Anatoly Podgoretsky ©   (2011-07-06 16:32) [2]

В форум по ИБ


 
dest81   (2011-07-06 16:40) [3]

Пасибо ребята! Хорошо что подсказали ...

Ключевое слово "правильнее"
Я делаю так
select t1.id,
sum(t2.suma)
from dogovor t1
left join plata t2 on t1.id=t2.id
group by t1.id

просто при 10000-ах записей делается очень долго, хотя такой запрос:
select id,sum(suma) from plata group by id
очень быстро


 
Медвежонок Пятачок ©   (2011-07-06 16:46) [4]

как правильнее вывести?

сначала выводят из египта.
потом попадают в пустыню.
потом ловят манну, получают и разбивают и снова получают скрижали, и парятся со скинией.
затем таки все выводятся в обетованную землю.
круглая сумма в начале и конце квеста приветствуется.


 
Медвежонок Пятачок ©   (2011-07-06 16:51) [5]

ну а в наше время суммы правильнее всего выводить в оффшор


 
Inovet ©   (2011-07-06 16:56) [6]

> [3] dest81   (06.07.11 16:40)
> делается очень долго

Индексы есть?


 
dest81   (2011-07-06 17:00) [7]


> Inovet ©


Если често то нет! віставить по обеим полям? Просто сума у меня не есть поисковым полем.


 
tesseract ©   (2011-07-06 17:10) [8]


> Если често то нет! віставить по обеим полям?


Ключи хоть на id поставь и то хорошо будет.


 
картман_   (2011-07-06 17:15) [9]

и по-русски, по-русски балакать начинай


 
Inovet ©   (2011-07-06 17:18) [10]

На dogovor id в определении таблицы primary key
На plata id_dg лучше сразу указать в определении таблицы зависимость foreign key
Ну и не лишний plata id primary key


 
SQLEXPRESS   (2011-07-06 17:19) [11]

записей в обеих таблах? по отдельности


 
dest81   (2011-07-06 17:23) [12]


> SQLEXPRESS


В табл. dogovor 10000, в табл. plata выше 20000


 
Inovet ©   (2011-07-06 17:30) [13]

> [12] dest81   (06.07.11 17:23)
> В табл. dogovor 10000, в табл. plata выше 20000

Это мало, должно всё летать.


 
dest81   (2011-07-06 17:36) [14]


> Inovet ©   (06.07.11 17:18) [10]
>
> На dogovor id в определении таблицы primary key
> На plata id_dg лучше сразу указать в определении таблицы
> зависимость foreign key
> Ну и не лишний plata id primary key


Соврал, счас посмотрел небыло только вторичного ключа.

на  Pentium Dual T2390 1.86 GHz 29 мин


 
dest81   (2011-07-06 17:40) [15]

Всем пасибо!

После добавления форинкея 30 мс


 
Inovet ©   (2011-07-06 17:40) [16]

> [14] dest81   (06.07.11 17:36)
> небыло только вторичного ключа

Такой теперь есть?
plata id_dg


 
Inovet ©   (2011-07-06 17:40) [17]

> [15] dest81   (06.07.11 17:40)
> После добавления форинкея 30 мс

Ну вот


 
dest81   (2011-07-06 17:41) [18]

Нидумал что форинкей так влияет (все-таки индексы рулят)


 
Inovet ©   (2011-07-06 17:43) [19]

> [18] dest81   (06.07.11 17:41)
> Нидумал что форинкей так влияет

Ну так а как поиск будет без ключа? на каждую запись из первой таблицы полный перебор второй.


 
tesseract ©   (2011-07-06 17:44) [20]


> Нидумал что форинкей так влияет (все-таки индексы рулят)


http://citforum.ru/database/osbd/contents.shtml

Обретай дзен.


 
SQLEXPRESS   (2011-07-06 18:13) [21]


> форинкей так влияет (все-таки индексы рулят)

индекс почти всегда рулит при select
а правильный индекс - всегда :)
и почти все субд его создают при fkey


 
Кщд   (2011-07-06 18:47) [22]

>SQLEXPRESS   (06.07.11 18:13) [21]
>а правильный индекс
критерии "правильности"?)


 
картман ©   (2011-07-06 21:02) [23]


> а правильный индекс - всегда :)

хрен там


 
engine ©   (2011-07-06 22:19) [24]


> критерии "правильности"?)

судя по плану, видимо


 
Кщд   (2011-07-06 23:50) [25]

>engine ©   (06.07.11 22:19) [24]
>судя по плану, видимо
общие слова
критерии не озвучены

в общем случае, прав картман: "хрен там"

например, в условиях:
1.

create table tmp (id number primary key, val number);
create index i_tmp$val on tmp(val);
;
2. таблица TMP содержит 1000 значений;
3. кол-во записей с val=1 равно 900, c val=2 равно, соответственно, 100;
4. выполняется запрос:

select t.* from tmp t where t.val = 1


Вопросы:
1. использование индекса будет оптимально?
2. это "правильный" индекс?


 
engine ©   (2011-07-07 00:00) [26]

Т.е. "правильный" индекс - динамический?


 
Кщд   (2011-07-07 04:39) [27]

>engine ©   (07.07.11 00:00) [26]
если вопрос адресован мне, то что значит "динамический" индекс?


 
SQLEXPRESS   (2011-07-07 08:34) [28]


> Кщд   (06.07.11 23:50) [25]

для этого запроса - нет


> критерии "правильности"?)

индекс участвует в большинстве запросов, специфичных для этой таблицы
или в самых важных
его выбор осуществляется методом мониторинга запросов, возможно не одного дня.
если повезет и хватит опыта оценить куда он нужен и не будет доказано, что он больше вредит другим операциям - он правильный :)


 
Anatoly Podgoretsky ©   (2011-07-07 08:36) [29]

> SQLEXPRESS  (07.07.2011 08:34:28)  [28]

Он вредит всегда, где требуется преобразование индекса.


 
SQLEXPRESS   (2011-07-07 08:46) [30]


> Anatoly Podgoretsky ©   (07.07.11 08:36) [29]

естественно,
поэтому с рабочей базы, оперативной, с индексами в разумных количествах,
у меня все скидывается ночью в другую, для отчетов. И вот та уже обвешана индексами, которые ребилдятся сразу после сброса, ночью, и до следующей ночи данные туда не попадают.

И есть еще набор таблиц, в наследство получил, которые вообще без индексов, туда сбрасывают данные железки, insert там огого как отрабатывает. А вот selectа не дождешься. Они тоже ночью перегоняется в свои аналоги, с индексами.


 
sniknik ©   (2011-07-07 09:39) [31]

> которые вообще без индексов
вообще вообще? или хотя бы праймари кей присутствует? он если сделать кластерным по авто инкременту практически не тормозит вставку.
а вот для селектов  мог бы пригодиться... ну вот хотя бы при перебросе в другую таблицу запоминаешь последний перенесенный и следующий начинаешь с него. (и переброс по нему можно сделать порционным, по 3 тыс записей к примеру... т.к. когда количество переносимого переваливает какой то предел, ну возьмем 5 мл. записей то "разовый" в транзакции (целостность тоже нужна) начинает тормозить "сам то себе" (в дисковый кеш влазит))


 
Anatoly Podgoretsky ©   (2011-07-07 09:47) [32]

Если значение нарастающие, то вообще не тормозит, поскольку физически его нет.


 
sniknik ©   (2011-07-07 10:04) [33]

> Если значение нарастающие
это и имелось ввиду.
> по авто инкременту
но чтобы вообще, сомневаюсь. все таки время на операции с добавлением значения поля, + чуть больше данных в записи, тратится. т.е. если запись sql сервером идет по тому же алгоритму, что без него то + время операции. с другой стороны алгоритм (и ветка кода) может быть вообще другой, тогда возможен даже выигрыш... но в любом случае это будет несущественная дельта.


 
SQLEXPRESS   (2011-07-07 11:05) [34]


> вообще вообще? или хотя бы праймари кей присутствует?

Ну да, PK присутствует. Обязательно.
кроме него  - никаких
Таблица без PK - недотаблица, имхо



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2011.10.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.005 c
15-1309811398
Юрий
2011-07-05 00:29
2011.10.30
С днем рождения ! 5 июля 2011 вторник


1-1270457034
Вульфович Филипп
2010-04-05 12:43
2011.10.30
Ошибка при вызове dll


15-1309897804
Юрий
2011-07-06 00:30
2011.10.30
С днем рождения ! 6 июля 2011 среда


2-1310110990
leon2011
2011-07-08 11:43
2011.10.30
Как из UTF8 получить WideString


15-1309764636
Andy BitOff
2011-07-04 11:30
2011.10.30
Кто как решает задачу...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский