Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Select * FROM t1, t2 ... или LEFT JOIN ? Что быстр 
:(
    Опции темы
gcc
Дата 19.8.2009, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



была ткая тема: http://forum.vingrad.ru/forum/topic-52054/unread-1.html

Что быстрее?

1 cлучай:

    
Код

SELECT * FROM t1, t2 WHERE t1.id=t2.id



2 cлучай:

    
Код

SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NOT NULL



а как это в PgSQl

есть база 10гиг DBmail VDSManager 


t1 
Код

email_templates_pkey    CREATE UNIQUE INDEX email_templates_pkey ON email_templates USING btree (id)    
Primary key
    
No
    Cluster    Reindex    
template_id_index    CREATE UNIQUE INDEX template_id_index ON email_templates USING btree (id)    
Unique key
    
No
    Cluster    Reindex    



t2
ничего нут в индексах

PM WWW ICQ Skype GTalk Jabber   Вверх
Shaggie
Дата 19.8.2009, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space

Репутация: 2
Всего: 72



Во-первых, должны быть равнозначны. Проверь генерируемые запросы через EXPLAIN <текст_запроса>.

Во-вторых, почему бы не заменить внешний джойн на внутренний, это проще и понятнее для чтения:
Код

SELECT * FROM t1 INNER JOIN t2 ON t1.id=t2.id

Слово INNER можно опустить, тип джойна внутренний по умолчанию, если не указано иначе.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
Akina
Дата 19.8.2009, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(gcc @  19.8.2009,  08:46 Найти цитируемый пост)
2 cлучай

а почему не inner join?  smile 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
gcc
Дата 19.8.2009, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



на всех программа которых я видел на php+MySQL везде стоит LEFT JOIN иногда WHERE, на Oracle INNER JOIN

INNER JOIN - это тоже самое что срванить и через WHERE, если я правильно понял

тогда переделаю на INNER JOIN

Это сообщение отредактировал(а) gcc - 19.8.2009, 08:39
PM WWW ICQ Skype GTalk Jabber   Вверх
DimW
Дата 19.8.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



удалил.

Это сообщение отредактировал(а) DimW - 19.8.2009, 09:31
PM MAIL ICQ   Вверх
Akina
Дата 19.8.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(gcc @  19.8.2009,  09:39 Найти цитируемый пост)
INNER JOIN - это тоже самое что срванить и через WHERE, если я правильно понял

Совсем не то же самое... вот, например, выдержка из справки по MySQL
Цитата

5.2.6. Как MySQL оптимизирует LEFT JOIN и RIGHT JOIN

Выражение "A LEFT JOIN B" в MySQL реализовано следующим образом: 

Таблица B устанавливается как зависимая от таблицы A и от всех таблиц, от которых зависит A. 

Таблица A устанавливается как зависимая ото всех таблиц (кроме B), которые используются в условии LEFT JOIN. 

Все условия LEFT JOIN перемещаются в предложение WHERE. 

Выполняются все стандартные способы оптимизации соединения, за исключением того, что таблица всегда читается после всех таблиц, от которых она зависит. Если имеется циклическая зависимость, MySQL выдаст ошибку. 

Выполняются все стандартные способы оптимизации WHERE. 

Если в таблице A имеется строка, соответствующая выражению WHERE, но в таблице B ни одна строка не удовлетворяет условию LEFT JOIN, генерируется дополнительная строка B, в которой все значения столбцов устанавливаются в NULL. 

Если LEFT JOIN используется для поиска тех строк, которые отсутствуют в некоторой таблице, и в предложении WHERE выполняется следующая проверка: column_name IS NULL, где column_name - столбец, который объявлен как NOT NULL, MySQL пререстанет искать строки (для отдельной комбинации ключа) после того, как найдет строку, соответствующую условию LEFT JOIN. 

Если почитать ещё и посравнивать - выяснится, что LEFT/RIGHT JOIN выполняется как INNER JOIN плюс дополнительные прибабахи. Которые процесс, ясен пень, не ускоряют.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 19.8.2009, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Akina @  19.8.2009,  10:18 Найти цитируемый пост)
выдержка из справки 


Akina, в выдержке нет ни слова про inner join, а втор спрашивал именно про него:
Цитата(gcc @  19.8.2009,  08:39 Найти цитируемый пост)
INNER JOIN - это тоже самое что 


PM MAIL ICQ   Вверх
Akina
Дата 19.8.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(DimW @  19.8.2009,  13:16 Найти цитируемый пост)
в выдержке нет ни слова про inner join, автор спрашивал именно про него

Вот пусть и работает. Если автору это действительно нужно, он пойдёт на сайт мускула и сам почитает. Или найдёт аналогичный раздел в документации на свою СУБД. Мне оно сто лет не надо...
А если ему влом - может поверить на слово. Или не поверить.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 19.8.2009, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



речь не о том кому влом, а кому нет.
речь о том что ваш ответ:
Цитата(Akina @  19.8.2009,  10:18 Найти цитируемый пост)
Совсем не то же самое


на вопрос:
Цитата(gcc @  19.8.2009,  08:39 Найти цитируемый пост)
INNER JOIN - это тоже самое что срванить и через WHERE, если я правильно понял

не верен, так как обрабатываться оптимизатором должен одинаково, исключением может быть только глюкавость самого оптимизатора.
PM MAIL ICQ   Вверх
Akina
Дата 19.8.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(DimW @  19.8.2009,  14:05 Найти цитируемый пост)
не верен, так как обрабатываться оптимизатором должен одинаково

Прочитайте ещё раз. 
Код

select t1.*, t2.* 
from t1
inner join t2
on t1.id=t2.id

абсолютно то же (план исполнения должен быть идентичен), что и
Код

select t1.*, t2.* 
from t1, t2
where t1.id=t2.id

но вовсе не то же самое, что 
Код

select t1.*, t2.* 
from t1
left join t2
on t1.id=t2.id
where t2.id is not null

В третьем варианте работы серверу будет больше - не думаю, что оптимизатор сможет правильно привести этот запрос к одному из первых двух. 

Так вот именно эту неэквивалентность я и показываю.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 19.8.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Akina @  19.8.2009,  13:26 Найти цитируемый пост)
не думаю, что оптимизатор сможет правильно привести этот запрос к одному из первых двух


создаем таблицы и заполняем их данными(СУБД оракл):
Код

create table table1
  (id number not null)
/
alter table table1
  add constraint table1_pk primary key (id)
/
-- наполняю данными
begin
  for i in 1 .. 100000
  loop
    insert into table1
      values (i);
  end loop;
end;
/ 
commit
/
select count(*) from table1
/

create table table2
(table1_id number)
/
alter table table2
  add constraint table2_fk foreign key (table1_id)
  references table1 (id)
/
-- наполняю данными
begin
  for i in 1 .. 5
  loop
    for i in 1 .. 50000
    loop
      insert into table2
        values (i);
    end loop;    
  end loop;
end;
/
commit
/
select count(*) from table2
/   


выполняем первый запрос:
Код

select count(*)
  from table1 t1
      ,table2 t2
 where t2.table1_id = t1.id;

смотрим план запроса:
Код

SELECT STATEMENT, GOAL = RULE                    
 SORT AGGREGATE                    
  NESTED LOOPS                    
   TABLE ACCESS FULL    JDBF    TABLE2            
   INDEX UNIQUE SCAN    JDBF    TABLE1_PK            


второй запрос:
Код

select count(*)
  from table1 t1
      inner join table2 t2 on t2.table1_id = t1.id


план:
Код

SELECT STATEMENT, GOAL = RULE                    
 SORT AGGREGATE                    
  NESTED LOOPS                    
   TABLE ACCESS FULL    JDBF    TABLE2            
   INDEX UNIQUE SCAN    JDBF    TABLE1_PK            


третий запрос:
Код

select count(*)
  from table1 t1
      left join table2 t2 on t2.table1_id = t1.id 
 where t2.table1_id is not null


план:
Код

SELECT STATEMENT, GOAL = RULE                    
 SORT AGGREGATE                    
  NESTED LOOPS                    
   TABLE ACCESS FULL    JDBF    TABLE2            
   INDEX UNIQUE SCAN    JDBF    TABLE1_PK


из преведенных планов видно что они идентичны. статистику выкладывать не буду, поверьте мне на слово - она тоже совпадает.
не нужно данный пример расценивать как руководство к действию т.к. пример был приведен из конкретной СУБД конкретной версии!


PM MAIL ICQ   Вверх
Akina
Дата 19.8.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Цитата(DimW @  19.8.2009,  16:09 Найти цитируемый пост)
из преведенных планов видно что они идентичны

Если не влом - план для последнего запроса, но без where, не затруднит?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 19.8.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Akina @  19.8.2009,  15:24 Найти цитируемый пост)
Если не влом - план для последнего запроса, но без where, не затруднит? 

Код

select count(*)
  from table1 t1
      left join table2 t2 on t2.table1_id = t1.id


Код

SELECT STATEMENT, GOAL = RULE 
 SORT AGGREGATE      
  HASH JOIN OUTER    
   TABLE ACCESS FULL  JDBF  TABLE1 
   TABLE ACCESS FULL  JDBF  TABLE2 


если что: Oracle9i Enterprise Edition Release 9.2.0.8.0 


PM MAIL ICQ   Вверх
Akina
Дата 19.8.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



Умный, собака  smile  не все СУБД так умеют.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DimW
Дата 19.8.2009, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Akina @  19.8.2009,  15:36 Найти цитируемый пост)
Умный, собака 

ага smile 

Цитата(Akina @  19.8.2009,  15:36 Найти цитируемый пост)
не все СУБД так умеют

я думаю что и на оракле не во всех случаях планы будут такими. 
чесно говоря я и сам до последнего не верил что получится, но должен был проверить. smile
PM MAIL ICQ   Вверх
gcc
Дата 19.8.2009, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



Код

SELECT t1.user_to,
                                     t1.host,
                                     t1.ip,
                                     t1.forwarded,
                                     t2.userid
                             FROM session AS t1,
                                 dbmail_users AS t2
                             WHERE t1.session = ?
                             AND t1.user_to = t2.user_idnr
                             LIMIT 1



Код


SELECT t1.user_to,
                                     t1.host,
                                     t1.ip,
                                     t1.forwarded,
                                     t2.userid
                             FROM session AS t1,                                 
                     INNER JOIN dbmail_users AS t2
                              ON  t1.user_to = t2.user_idnr
                             WHERE t1.session = ?
                             LIMIT 1


это без разницы абсолютно

а если так:

тоже?

Код


SELECT t1.user_to,
                                     t1.host,
                                     t1.ip,
                                     t1.forwarded,
                                     t2.userid
                             FROM session AS t1,                                 
                     INNER JOIN dbmail_users AS t2
                              ON  t1.user_to = t2.user_idnr
                             AND t1.session = ?
                             LIMIT 1



PM WWW ICQ Skype GTalk Jabber   Вверх
gcc
Дата 19.8.2009, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



забыл сказать, что тестировать нету времени, надо чтобы уже всё завтра или после завтра работало  smile 

(если бы было времято протестировал бы всё)
PM WWW ICQ Skype GTalk Jabber   Вверх
Akina
Дата 19.8.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 3
Всего: 454



gcc, для меня всегда LIMIT без ORDER BY был загадкой... пофиг что, лишь бы с ног валило? ... но это так, в качестве оффтопа.

Запрос, кроме корректности и валидности, должен быть ещё и читаем (т.е. сопровождаем). Третий вариант явно не катит, а из двух первых выбирай любой. Индексы в данном случае важнее формы запроса.

PS. Счас вроде в политике развития SQL есть движуха от связи к отбору... 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 27.8.2009, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 3
Всего: 161



Цитата(DimW @  19.8.2009,  15:44 Найти цитируемый пост)
есно говоря я и сам до последнего не верил что получится,

Я тоже не поверил, перепроверять пришлось smile Оракля меня тоже удивил переписав третий запрос на иннер джойн
Цитата(DimW @  19.8.2009,  15:09 Найти цитируемый пост)
из преведенных планов видно

Не так уж и видно этого из приведенных, ну разве что если уж очень наметанным глазом смотреть. У меня не такой. Я созерцая твой план долго вспоминал, умеет ли оракля фильтр совмещать c NL (как он это делаяет для FTS), а то что NL и NL OUTER это суть разные опарации, вообще для мея открытием сталоsmile я полагал что это одна операция, но разные предикаты доступа

Прости уж за буквоедство мне кажется так лучше видно будет
План когда оракля смог одуплить что третий запрос эквивалентен inner:
Код

SQL> explain plan for select * from t1 left join t2 on t1.id =t2.id where t2.id is not null;

Îáúÿñíåíî.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------
Plan hash value: 3447058062

----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |   101K|  2574K|    26  (66)| 00:00:01 |
|   1 |  NESTED LOOPS      |       |   101K|  2574K|    26  (66)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| T2    |   101K|  1287K|    10  (10)| 00:00:01 |
|*  3 |   INDEX UNIQUE SCAN| T1$PK |     1 |    13 |     0   (0)| 00:00:01 |
----------------------------------------------------------------------------


PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

   3 - access("T1"."ID"="T2"."ID")

Note
-----
   - dynamic sampling used for this statement

19 ñòðîê âûáðàíî.


План, когда мы малость подзапутали ораклю, так чтобы он этого не одуплил:
Код

SQL> explain plan for select * from t1 left join t2 on t1.id =t2.id where to_char(t2.id) is not null;

Îáúÿñíåíî.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------
Plan hash value: 4183880694

-----------------------------------------------------------------------------
| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |       |   104K|  2656K|    26  (66)| 00:00:01 |
|*  1 |  FILTER             |       |       |       |            |          |
|   2 |   NESTED LOOPS OUTER|       |   104K|  2656K|    26  (66)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| T1    |   104K|  1328K|    10  (10)| 00:00:01 |
|*  4 |    INDEX UNIQUE SCAN| T2$PK |     1 |    13 |     0   (0)| 00:00:01 |
-----------------------------------------------------------------------------

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(TO_CHAR("T2"."ID") IS NOT NULL)
   4 - access("T1"."ID"="T2"."ID"(+))

Note
-----
   - dynamic sampling used for this statement

21 ñòðîê âûáðàíî.



PS Сорри за оффтоп.

Добавлено @ 16:13
Цитата(gcc @  19.8.2009,  21:26 Найти цитируемый пост)
а если так:
тоже?

Если так то тоже. Но это плохой тон. Есть критерии объединения, они указываютя в конструкции join есть критерии отбора(фильтра),они указываются в конструкции where. В случае с inner join результаты соединения и филтрации совпадают и предикаты могут быть прописаны как в join кляузе так и в where, однако если критерии объединения спустить в where, то это может проканает как old style join, но описывать фильтр в join это обсфукация в чистом виде.

Это сообщение отредактировал(а) Zloxa - 28.8.2009, 09:05


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.8.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Zloxa @  27.8.2009,  16:06 Найти цитируемый пост)
Не так уж и видно этого из приведенных

да, полностию согласен - хотел минимизировать колличество ненужной инфы не в оракловой ветке smile
а я вот думаю куда ты запропостился, оракл смакуют, а от тебя ни слова. видимо сезон отпусков. 
вообще твои замечания и уточнения вселяют еще большую уверенность в моих выводах и догадках, СПАСИБО!

Добавлено через 6 минут и 26 секунд
Цитата(Zloxa @  27.8.2009,  16:06 Найти цитируемый пост)
для FTS

FTS это full table scan?
PM MAIL ICQ   Вверх
Zloxa
Дата 28.8.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 3
Всего: 161



Цитата(DimW @  28.8.2009,  08:40 Найти цитируемый пост)
FTS это full table scan? 

угу smile


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
DimW
Дата 28.8.2009, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



ок, понял.
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PostgreSQL | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.