|
|
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
работаем в PL/SQL что будет быстрее работать? 1. begin select DISTINCT pid into c1 from table1 return(1); exception when no_data_found then return(0); end; или 2. begin select pid into c1 from table1 return(1); exception when no_data_found then return(0); when TOO_MANY_ROWS THEN Return(1); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 11:00 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Быстрее будет второй вариант....хотя это плохая практика.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 11:26 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
В случае, если в таблице несколько строк с разными PID, первый текст даст too_many_rows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 11:47 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Виноват, в таком виде 1. begin select DISTINCT pid into c1 from table1 where pid=111; return(1); exception when no_data_found then return(0); end; или 2. begin select pid into c1 from table1 where pid=111; return(1); exception when no_data_found then return(0); when TOO_MANY_ROWS THEN Return(1); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 13:43 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Какой смысл в этом: select DISTINCT pid into c1 from table1 where pid=111; Зачем DISTINCT ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 13:47 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
begin select pid into c1 from table1 where pid=111 and rownum < 2; return(1); exception when no_data_found then return(0); end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 13:54 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
select DISTINCT pid into c1 from table1 where pid=111; ПОЛНЫЙ БРЭД.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 14:02 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
ниче не бред, нужно определить наличие, или отсутствие записи, а что в ней (и сколько их всего) совсем по барабану. табличка (платежей) не маленькая. pid - это, сразу скажу ,не первичный ключ. вообщем, есть клиент, его pid - такойто, на него приходится много платежей. Вот и нада определить были ли ВООБЩЕ платежи или их не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 17:29 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Chto-to vrode etogo:: declare n number := 0; begin select 1 into n from table1 where pid=111 ; return(n); exception when no_data_found then n := 0; return(n); when Others Then n := -1 * sqlcode; return(n); end; Podoidet? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 17:45 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. -- vozvraschaet 0 ili 1 zapis t.e dlya "normalnoy raboty nado ispolzovat pl/sql block i obrabotku exception (no_data_found) Код: plaintext 1. 2. 3. 4. 5. 6. 7. -- vozvraschaet vsegda 1 zapis -- no NOT EXISTS eto ochen plohoe reshenie -- esly pole p.pid ne imeet ogranicheniya NOT NULL -- -- rabotaet gde ugodno (i v sql i v pl/sql) -- i vsegda vidaet 1 zapis ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2003, 18:15 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Полный бред!!! >>нужно определить наличие, или отсутствие записи select count(pid) into c1 from table1 where (pid=111); c1=0 - нет записей, с1>0 - есть записи. Или так select decode(count(pid),0,0,1) into c1 from table1 where (pid=111); c1=0 - нет записей, с1=1 - есть записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 11:42 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Или так :)) select nvl(max(1),0) into <кудато> from <table> where pid=<чегото>; Короче извращаться можно долго и по всякому :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 11:57 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
2Yuric >Полный бред!!! Чтобы выяснить наличие хотя бы одной записи с pid=111 , например, в таблице из миллиона ззаписей , среди которых 999000 штук с pid=111 , по-вашему , надо тщательно убедиться (фулсканом или фулиндекссканом), что их именно 999000 и затем гордо сказать - ДА ! В таблице ЕСТЬ запись с pid=111 !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 12:32 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
Ну так как всё-таки надо ПРАВИЛЬНО определять присутствие или отсутствие записей в таблице, удовлетворяющих определенному условию? к примеру, чем вариант select pid into c1 from table1 where pid=111 and rownum = 1; хуже варианта select pid into c1 from table1 where pid=111 and rownum < 2; ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 12:56 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
А протестировать предложенные варианты на своих данных лень? Приведи EXPLAIN PLANs. посмотри вариант от ShgGena select 1 from dual where exists ( select null from payment_table p where p.pid = 111); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 19:39 |
|
||
|
что будет быстрее
|
|||
|---|---|---|---|
|
#18+
To Chira: Нет, мне не лень протестировать варианты, и как это сделать, я тоже знаю. Просто все чего-то советуют, уверенные в том что их код лучше (а может просто так, из чувства коллективизма). Но может быть сам оракл (вернее спецы из компании) что-то рекомендует по данному вопросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 01:53 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32120460&tid=1991430]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 504ms |

| 0 / 0 |
