powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите разобраться с join'ом
10 сообщений из 10, страница 1 из 1
помогите разобраться с join'ом
    #32734799
wlck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почему sql1 убивает сервер
sql1
Код: plaintext
1.
2.
UPDATE __NewParkings INNER JOIN __NewProperties 
ON __NewParkings.ParentPropID = __NewProperties.OldPropID 
SET  __NewParkings.ParentPropID = __NewProperties.PropID;

тогда как sql2 работает на ура
sql2
Код: plaintext
1.
2.
UPDATE __NewParkings INNER JOIN __NewProperties 
ON __NewParkings.ParentPropID = __NewProperties.OldPropID AND __NewParkings.ParentPropID IS NOT NULL
SET __NewParkings.ParentPropID = __NewProperties.PropID;

?
ничего не понимаю ;((
p.s. если вместо update делать select - таже проблема

top PID USER %CPU COMMAND
4489 mysql 99.4 mysqld
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32735836
ИМХО, все, что в состоянии вышибить сервер, относится к категории bugs . С этим скорее не Вам разбираться, а MySQL AB.
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32735922
max(id)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во первых: версия MySQL-я? Во вторых: неплохобы взглянуть на результаты EXPLAIN для обоих запросов?
Ну а так в голову идет только то, что с версии 4 вещи типа
Код: plaintext
1.
__NewParkings.ParentPropID IS NOT NULL
заставляют MySQL использовать индекс по этому полю.
Вот что сказано в доке:
Код: plaintext
1.
2.
При поиске с использованием column_name IS NULL будут использоваться индексы, 
если column_name является индексом.
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32735930
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может выражение
Код: plaintext
AND __NewParkings.ParentPropID IS NOT NULL

Перенести в WHERE?

Код: plaintext
1.
2.
3.
4.
5.
UPDATE __NewParkings INNER JOIN __NewProperties 
ON __NewParkings.ParentPropID = __NewProperties.OldPropID
SET __NewParkings.ParentPropID = __NewProperties.PropID
WHERE
__NewParkings.ParentPropID IS NOT NULL;


Код: plaintext
 .  http://sql.ru/]mahoune  
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32735957
max(id)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 mahoune
Тогда получим тоже что и в первом случае только с фильтром по
__NewParkings.ParentPropID IS NOT NULL. Но выполнятся фильтрация будет посде соединения таблиц при котором не будет использоваться индекс, а это и есть главный тормоз первого запроса. Если я не в чем не ошибся...
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32736161
cid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя индексы по ключам построены?
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32736386
wlck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
EXPLAIN
SELECT __NewProperties.PropID
FROM  __NewParkings INNER JOIN __NewProperties 
ON __NewParkings.ParentPropID = __NewProperties.OldPropID

Код: plaintext
1.
2.
     table      type  possible_keys  key         key_len ref                      rows  Extra 
__NewParkings  index  ParentPropID  ParentPropID  5      NULL                     7072  Using index  
__NewProperties  ref  OldPropID     OldPropID     5    __NewParkings.ParentPropID  1    Using where  


Код: plaintext
1.
2.
3.
EXPLAIN
SELECT __NewProperties.PropID
FROM  __NewParkings INNER JOIN __NewProperties 
ON __NewParkings.ParentPropID = __NewProperties.OldPropID AND __NewParkings.ParentPropID IS NOT NULL;

Код: plaintext
1.
2.
     table       type  possible_      keys key    key_len ref                      rows Extra 
__NewParkings    range ParentPropID  ParentPropID  5      NULL                     369  Using where; Using index  
__NewProperties  ref   OldPropID     OldPropID     5     __NewParkings.ParentPropID  1  Using where  

то есть ясно почему запрос намбер2 работает быстрее, но почему намбер1 совсем не работает не ясно
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32736406
wlck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mahouneА может выражение
Код: plaintext
AND __NewParkings.ParentPropID IS NOT NULL ...


тогда, всё, кабздец серверу.
версия 4.0.20-standard
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32736435
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А может покажешь
Код: plaintext
1.
2.
SHOW CREATE TABLE __NewProperties;
SHOW CREATE TABLE __NewParkings;

Код: plaintext
 .  http://sql.ru/]mahoune  
...
Рейтинг: 0 / 0
помогите разобраться с join'ом
    #32736465
wlck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
#
# Table structure for table '__NewParkings'
#


CREATE TABLE `__NewParkings` (
`PropID` int(10) unsigned NOT NULL default '0',
`LevelID` smallint(5) unsigned default NULL,
`ParentPropID` int(10) unsigned default NULL,
`Roofed` tinyint(1) unsigned default '0',
`Double` tinyint(1) unsigned default '0',
PRIMARY KEY (`PropID`),
KEY `LevelID` (`LevelID`),
KEY `ParentPropID` (`ParentPropID`)
) TYPE=MyISAM;



#
# Table structure for table '__NewProperties'
#

CREATE TABLE `__NewProperties` (
`PropID` int(10) unsigned NOT NULL auto_increment,
`OldPropID` int(10) unsigned default NULL,
PRIMARY KEY (`PropID`),
KEY `OldPropID` (`OldPropID`)
) TYPE=MyISAM;
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / помогите разобраться с join'ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]