Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql索引和连接_Mysql - Fatal编程技术网

Mysql索引和连接

Mysql索引和连接,mysql,Mysql,我有一个问题 SELECT `a`.restid, `b`.`name` AS execname, `c`.`dept_name` FROM `tk_ticket` AS a INNER JOIN `tk_acp_users` AS b ON `a`.`exec_id` = `b`.`id` INNER JOIN `tk_ticket_dept` AS c ON `a`.`dept_id` = `c`.`dept_id` WHERE `a`.`dept_id` IN(9,11) AND `a`.

我有一个问题

SELECT `a`.restid, `b`.`name` AS execname, `c`.`dept_name`
FROM `tk_ticket` AS a
INNER JOIN `tk_acp_users` AS b ON `a`.`exec_id` = `b`.`id`
INNER JOIN `tk_ticket_dept` AS c ON `a`.`dept_id` = `c`.`dept_id`
WHERE `a`.`dept_id` IN(9,11)
AND `a`.`status` =  0
ORDER BY `a`.`date` DESC, `a`.`dept_id`
解释输出

1   SIMPLE  a   ALL exec_id_2   5391    Using  where; Using filesort
1   SIMPLE  b   eq_ref  PRIMARY PRIMARY 2 tk_new_db.a.exec_id   1   
1   SIMPLE  c   eq_ref  PRIMARY PRIMARY 1 tk_new_db.a.dept_id   1   Using where

当我运行explain时,我得到了表a的完整表扫描,如何防止这种情况发生我添加了一个键(exec\u id,dept\u id,status),但没有考虑这个索引。

我认为MySQL不能在这里使用(exec\u id,dept\u id,status)上的索引,因为WHERE子句中没有exec\u id。尝试在(dept\u id,status)上添加索引,或者在(exec\u id)上为联接添加单独的索引。请参见

我认为MySQL不能在这里使用(exec\u id、dept\u id、status)上的索引,因为WHERE子句中没有exec\u id。尝试在(dept\u id,status)上添加索引,或者在(exec\u id)上为联接添加单独的索引。请参见

因为WHERE子句使用dept\u id和status,而不是exec\u id,所以不会使用您创建的索引

这是因为,如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀来查找行。例如,如果在(col1,col2,col3)上有一个三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

如果列不构成索引的最左侧前缀,MySQL将无法使用索引


您可以在此处阅读更多内容:

因为WHERE子句使用dept\u id和status,而不是exec\u id,所以不会使用您创建的索引

这是因为,如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀来查找行。例如,如果在(col1,col2,col3)上有一个三列索引,则在(col1),(col1,col2)和(col1,col2,col3)上有索引搜索功能

如果列不构成索引的最左侧前缀,MySQL将无法使用索引


您可以在这里阅读更多内容:

主键如何?您可以发布解释计划的输出吗?我猜“ORDER BY
a
date
”会导致全表扫描。没有时间测试它,所以这只是一个瞎猜,对不起。@timur即使我删除了order by子句,我也会得到一个完整的表扫描。主键呢?你能发布解释计划的输出吗?我猜“order by
a
日期”会导致完整的表扫描。没有时间测试它,所以这只是一个瞎猜,对不起。@timur即使在我删除orderby子句之后,我也会得到一个完整的表扫描