_RVK_
Новичок
Странности оптимизации LIMIT и ORDER BY.
SELECT * FROM dbtree AS t1, ads AS t2 WHERE (t1.cleft BETWEEN 3 AND 4) AND (t1.clevel=2) AND (t1.id=t2.id_tree) ORDER BY t2.date DESC LIMIT 2
Сколько записей должен выдать такой запрос? Ага, две(без лимита 3). А выдает 1. И только для LIMIT 5 получаю 3 записи.
Привожу дамп базы. Для того что бы могли посмотреть и убедится.
Обратите внимания что в таблицах нет ни одного индекса (кроме PRIMARY). Когда я создаю все необходимые индексы, все работает как и должно.
Можно ли такое поведение MySQL считать багом? Я так понимаю это ошибки в оптимизации запросов с LIMIT и ORDER BY.
SELECT * FROM dbtree AS t1, ads AS t2 WHERE (t1.cleft BETWEEN 3 AND 4) AND (t1.clevel=2) AND (t1.id=t2.id_tree) ORDER BY t2.date DESC LIMIT 2
Сколько записей должен выдать такой запрос? Ага, две(без лимита 3). А выдает 1. И только для LIMIT 5 получаю 3 записи.
Привожу дамп базы. Для того что бы могли посмотреть и убедится.
Обратите внимания что в таблицах нет ни одного индекса (кроме PRIMARY). Когда я создаю все необходимые индексы, все работает как и должно.
Можно ли такое поведение MySQL считать багом? Я так понимаю это ошибки в оптимизации запросов с LIMIT и ORDER BY.
PHP:
CREATE TABLE ads (
id int(4) AUTO_INCREMENT NOT NULL,
date int(11),
id_tree int(11),
PRIMARY KEY(id)
);
#
# Dumping data for table ads
#
INSERT INTO ads VALUES(10, 1102682771, 76);
INSERT INTO ads VALUES(6, 1102682702, 75);
INSERT INTO ads VALUES(7, 1102682777, 75);
INSERT INTO ads VALUES(8, 1102682822, 75);
INSERT INTO ads VALUES(9, 1102683714, 76);
#Table structure for table dbtree
CREATE TABLE dbtree (
id int(10) unsigned AUTO_INCREMENT NOT NULL,
cleft int(11),
cright int(11),
clevel int(11),
PRIMARY KEY(id)
);
#
# Dumping data for table dbtree
#
INSERT INTO dbtree VALUES(1, 1, 28, 0);
INSERT INTO dbtree VALUES(79, 15, 16, 2);
INSERT INTO dbtree VALUES(78, 13, 14, 2);
INSERT INTO dbtree VALUES(77, 7, 8, 2);
INSERT INTO dbtree VALUES(73, 24, 25, 1);
INSERT INTO dbtree VALUES(74, 26, 27, 1);
INSERT INTO dbtree VALUES(75, 3, 4, 2);
INSERT INTO dbtree VALUES(70, 18, 19, 1);
INSERT INTO dbtree VALUES(69, 12, 17, 1);
INSERT INTO dbtree VALUES(71, 20, 21, 1);
INSERT INTO dbtree VALUES(72, 22, 23, 1);
INSERT INTO dbtree VALUES(32, 2, 9, 1);
INSERT INTO dbtree VALUES(33, 10, 11, 1);
INSERT INTO dbtree VALUES(76, 5, 6, 2);