【发布时间】:2009-01-21 21:07:20
【问题描述】:
我有以下疑问:
SELECT DISTINCT c.id
FROM clients AS c
LEFT JOIN client_project AS cp ON (cp.client_id = c.id)
WHERE cp.project_id = 1
AND c.active_flag = 1
ORDER BY c.client_name
如果我删除订单,查询需要 0.005 秒。使用 order by,查询需要 1.8-1.9 秒。我在client_name 上有一个索引。
还有什么可以提高速度的?
编辑: c.id 是主键,但在 client_project 中可能有多个记录,因此可能导致每个 id 有多个记录。此外,删除 distinct 会在查询中产生 0.1 秒的差异。
补充:这是我的客户表:
CREATE TABLE IF NOT EXISTS `clients` (
`id` int(11) NOT NULL auto_increment,
...
`organization` varchar(255) character set utf8 collate utf8_bin NOT NULL,
`client_name` varchar(255) character set utf8 collate utf8_bin NOT NULL,
`active_flag` tinyint(1) NOT NULL,
...
PRIMARY KEY (`id`),
KEY `active_flag` (`active_flag`),
...
KEY `organization` (`organization`),
KEY `client_name` (`client_name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
使用 MySQL 5.0
【问题讨论】:
-
告诉我们您的 MySQL 版本以及您的索引是如何定义的...
-
索引在那里:KEY
client_name(client_name) -
感谢添加..您有机会查看执行计划(解释
)吗? -
解释似乎没有显示任何有关订单的信息。
-
这个问题更适合 dba.stackexchange.com 看到这个dba.stackexchange.com/questions/40190/…
标签: mysql query-optimization sql-order-by