2010-11-02 3 views
2

Прежде всего, вот таблица:MariaDB, PBXT и таинственные результаты запрос

CREATE TABLE `outlet_tags` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `importer_id` int(11) NOT NULL, 
    `outlet_id` int(11) NOT NULL, 
    `code` varchar(20) NOT NULL, 
    `postcode` varchar(15) DEFAULT NULL, 
    `tag_set` varchar(45) DEFAULT NULL, 
    `tag_type` varchar(45) DEFAULT NULL, 
    `tag_details` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_report_outlet_tags_1` (`importer_id`), 
    KEY `fk_report_outlet_tags_2` (`outlet_id`), 
    KEY `outlet_tag_set` (`tag_set`), 
    KEY `outlet_tag_type` (`tag_type`), 
    KEY `outlet_tag_details` (`tag_details`), 
    CONSTRAINT `fk_report_outlet_tags_1` FOREIGN KEY (`importer_id`) REFERENCES `importers` (`id`), 
    CONSTRAINT `fk_report_outlet_tags_2` FOREIGN KEY (`outlet_id`) REFERENCES `outlets` (`id`) 
) ENGINE=PBXT DEFAULT CHARSET=utf8; 

Может кто-нибудь пролить свет на то, почему значения полей изменяются в зависимости от условий, используемых в следующих запросах? Это не происходит, если движок Марии.

select * from outlet_tags where code=1503 and outlet_id=407 limit 3; 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| id | importer_id | outlet_id | code | postcode | tag_set | tag_type  | tag_details | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| 222 |   1 |  407 | 1503 | XXX XXX | outlet | Make up   | Make up  | 
| 675 |   1 |  407 | 1503 | XXX XXX | outlet | Approved Status | Approved  | 
| 1619 |   1 |  407 | 1503 | XXX XXX | outlet | Retail Area  | No Retail Area | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
3 rows in set (0.00 sec) 

select * from outlet_tags where code=1503 and importer_id=1 limit 3; 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| id | importer_id | outlet_id | code | postcode | tag_set | tag_type  | tag_details | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
| 222 |   1 |  407 | 1503 | XXX XXX | outlet | Make up   | Make up  | 
| 675 |   1 |  407 | 1503 | XXX XXX | outlet | Approved Status | Approved  | 
| 1619 |   1 |  407 | 1503 | XXX XXX | outlet | Retail Area  | No Retail Area | 
+------+-------------+-----------+------+----------+---------+-----------------+----------------+ 
3 rows in set (0.00 sec) 

select * from outlet_tags where importer_id=1 and outlet_id=407 limit 3; 
+------+-------------+-----------+------+----------+---------+----------+-------------+ 
| id | importer_id | outlet_id | code | postcode | tag_set | tag_type | tag_details | 
+------+-------------+-----------+------+----------+---------+----------+-------------+ 
| 222 |   1 |  407 | 1503 | NULL  | NULL | NULL  | NULL  | 
| 675 |   1 |  407 | 1503 | NULL  | NULL | NULL  | NULL  | 
| 1619 |   1 |  407 | 1503 | NULL  | NULL | NULL  | NULL  | 
+------+-------------+-----------+------+----------+---------+----------+-------------+ 
3 rows in set (0.00 sec) 

Update: от MariaDB 5.5 PBXT was dropped as a storage engine

+0

Кто-нибудь думает, что это могут быть плохие индексные данные, вызывающие значения NULL? Третий запрос - единственный, который использует только индексированные поля в условии WHERE. – Cez

ответ

1

Попробуйте использовать ORDER BY с запросами.

Различные двигатели могут возвращать строки в различном порядке в зависимости от того, как извлекаются строки.

+2

Спасибо, что вернули это из мертвых! Я не уверен, что понимаю ваш комментарий. Строки, возвращаемые тремя запросами, имеют соответствующие PK и, таким образом, являются одинаковыми строками, но третий запрос имеет значения NULL, в которых другие 2 имеют действительные данные. – Cez