Details
-
Bug
-
Status: Open (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.2.26
-
None
-
OS Windows Server 2012 R2 x64
Description
Добрый день!
Прошу помощи!
Есть запрос
SELECT
|
s.id, s.TId, t.id kid
|
FROM |
(SELECT |
seq id,
|
zb_GetTrackId(CONCAT('http://site.com/maps/?l=1&v=1&id=', seq)) TId |
FROM seq_1_to_100 s) s |
JOIN tracks t ON t.id = s.id; |
Он выполняется за миллисекунды.
Но если его изменить JOIN tracks t ON t.id = s.TId
То он уже выполняется на несколько порядков больше 70-80 сек. Почему так????
Функция zb_GetTrackId возвращает ID из URL если он есть в таблице tracks.
Результат выполнения запроса в обоих случаях одинаков:
id BIGINT(20), TId INT(11), kid INT(11)
1 1 1
34 34 34
42 42 42
44 44 44
47 47 47
48 48 48
53 53 53
60 60 60
69 69 69
70 70 70
71 71 71
72 72 72
73 73 73
74 74 74
75 75 75
76 76 76
План запроса в первом случае см. рис. Plan 1.png
Во втором см. рис. Plan 2.png
Почему не используется PRIMARY, а используется индекс IDX_tracks_Department_id?
Таблица
CREATE TABLE tracks (
id int(11) NOT NULL AUTO_INCREMENT,
Department_id int(11) NOT NULL,
Name varchar(50) NOT NULL,
Parent_id int(11) DEFAULT NULL,
Nagr_id bigint(20) DEFAULT NULL,
CorrDate datetime NOT NULL,
UserName varchar(50) NOT NULL,
PRIMARY KEY (id)
)
ENGINE = INNODB,
AUTO_INCREMENT = 27308,
AVG_ROW_LENGTH = 862,
CHARACTER SET utf8,
COLLATE utf8_unicode_ci;
ALTER TABLE tracks
ADD INDEX IDX_tracks_Department_id (Department_id);
ALTER TABLE tracks
ADD CONSTRAINT FK_tracks_department_Id FOREIGN KEY (Department_id)
REFERENCES department (Id);
ALTER TABLE tracks
ADD CONSTRAINT FK_tracks_tracks_id FOREIGN KEY (Parent_id)
REFERENCES tracks (id) ON DELETE CASCADE ON UPDATE CASCADE;