|
24.03.2015, 18:53:49
#38915516
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
SELECT
c0_.cust_id AS cust_id0,
c0_.cust_status AS cust_status1,
c0_.cust_name AS cust_name2,
c0_.cust_type AS cust_type3,
c0_.pay_type AS pay_type4,
c0_.pay_days AS pay_days5,
c0_.head_office AS head_office6,
c0_.cust_is_incoming AS cust_is_incoming7,
c0_.cust_notification_lang AS cust_notification_lang8,
c1_.cust_id AS cust_id9,
c1_.co_expire AS co_expire10,
c1_.co_comment AS co_comment19,
c1_.country_id AS country_id21
FROM
cust c0_
INNER JOIN co c1_ ON c0_.cust_id = c1_.cust_id
WHERE
(
c0_.cust_status = 0
AND c0_.cust_type < 3
)
OR c0_.cust_id = 1
ORDER BY
c0_.cust_name ASC;
При этом запросе вторая таблица выбирается полностью, на не очень быстрой тестовой машине это занимает 2 секунды.
Можно ли как то оптимизировать выборку ?
результат explain:
1. 2. 3. 4. 5. 6. 7.
+----+-------------+-------+--------+-----------------------------+---------+---------+------------------+--------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-----------------------------+---------+---------+------------------+--------+---------------------------------+
| 1 | SIMPLE | c1_ | ALL | PRIMARY | NULL | NULL | NULL | 882231 | Using temporary; Using filesort |
| 1 | SIMPLE | c0_ | eq_ref | PRIMARY,IDX_997B25A3DBD6375 | PRIMARY | 4 | trol.c1_.cust_id | 1 | Using where |
+----+-------------+-------+--------+-----------------------------+---------+---------+------------------+--------+---------------------------------+
2 rows in set
Таблица cust:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
CREATE TABLE `cust` (
`cust_id` int(11) NOT NULL AUTO_INCREMENT,
`cust_status` int(11) NOT NULL,
`cust_name` varchar(30) NOT NULL,
`cust_type` smallint(6) NOT NULL,
`pay_type` smallint(6) NOT NULL,
`pay_days` smallint(6) NOT NULL,
`cust_contr` tinyint(1) NOT NULL,
`head_office` smallint(6) NOT NULL,
`cust_is_incoming` tinyint(1) NOT NULL,
`cust_notification_lang` smallint(6) NOT NULL,
PRIMARY KEY (`cust_id`),
KEY `IDX_997B25AEF404A5A` (`cust_name`) USING BTREE,
KEY `IDX_997B25A3DBD6375` (`cust_type`) USING BTREE
) ENGINE=InnoDB
Таблица co:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
CREATE TABLE `co` (
`cust_id` int(11) NOT NULL,
`co_expire` date DEFAULT NULL,
`co_credit` int(11) NOT NULL,
`country_id` smallint(6) DEFAULT NULL,
`co_date` int(10) unsigned NOT NULL DEFAULT '0',
`co_comment` varchar(255) DEFAULT NULL,
PRIMARY KEY (`cust_id`),
KEY `co_expire` (`co_expire`) USING BTREE,
KEY `IDX_D2045652F92F3E70` (`country_id`),
CONSTRAINT `FK_D2045652BFF2A482` FOREIGN KEY (`cust_id`) REFERENCES `cust` (`cust_id`)
) ENGINE=InnoDB DEFAULT
|
|
|