2015-04-04 29 views
1
mysql> EXPLAIN SELECT * FROM 
(`phppos_modules`) 
JOIN `phppos_permissions` ON `phppos_permissions`.`module_id`=`phppos_modules`.`module_id` 
WHERE `phppos_permissions`.`person_id` = '1' 
ORDER BY `sort` asc; 
+----+-------------+--------------------+--------+-------------------+---------+---------+------------------------------------+------+----------------+ 
| id | select_type | table    | type | possible_keys  | key  | key_len | ref        | rows | Extra   | 
+----+-------------+--------------------+--------+-------------------+---------+---------+------------------------------------+------+----------------+ 
| 1 | SIMPLE  | phppos_modules  | ALL | PRIMARY   | NULL | NULL | NULL        | 11 | Using filesort | 
| 1 | SIMPLE  | phppos_permissions | eq_ref | PRIMARY,person_id | PRIMARY | 306  | pos.phppos_modules.module_id,const | 1 | Using index | 
+----+-------------+--------------------+--------+-------------------+---------+---------+------------------------------------+------+----------------+ 
2 rows in set (0.00 sec) 


mysql> show create table phppos_modules; 
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| Table   | Create Table                                                                                                                              | 
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| phppos_modules | CREATE TABLE `phppos_modules` (
    `name_lang_key` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `desc_lang_key` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `sort` int(10) NOT NULL, 
    `icon` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `module_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`module_id`), 
    UNIQUE KEY `desc_lang_key` (`desc_lang_key`), 
    UNIQUE KEY `name_lang_key` (`name_lang_key`), 
    KEY `sort` (`sort`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | 
+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql>  
    mysql> show create table phppos_permissions; 
    +--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 

| Table    | Create Table                                                                                                                       | 
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| phppos_permissions | CREATE TABLE `phppos_permissions` (
    `module_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL, 
    `person_id` int(10) NOT NULL, 
    PRIMARY KEY (`module_id`,`person_id`), 
    KEY `person_id` (`person_id`), 
    CONSTRAINT `phppos_permissions_ibfk_1` FOREIGN KEY (`person_id`) REFERENCES `phppos_employees` (`person_id`), 
    CONSTRAINT `phppos_permissions_ibfk_2` FOREIGN KEY (`module_id`) REFERENCES `phppos_modules` (`module_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci | 
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

回答

1

可能你正受到來自documentation這一條件(MySQL的5):

用來獲取行的關鍵是不作爲 ORDER BY使用一個相同的:

SELECT * FROM t1 WHERE key2=constant ORDER BY key1; 

嘗試以下操作:

ALTER TABLE `phppos_modules` 
ADD INDEX `all_w_sort_first` (`sort`,`module_id`,`name_lang_key`,`desc_lang_key`,`icon`); 
+0

你真了不起!那樣做了。 – 2015-04-04 14:54:01

+0

@ChrisMuench很好聽。你(不像其他大多數人)實際上提供了'SHOW CREATE TABLE'語句幫助了很多。你能接受這個答案,因爲它似乎解決了你的問題? – 2015-04-04 16:56:15

相關問題