我有一个包含 2100 万条记录的表,托管在 2Ghz 2GB GoDaddy VPS 上,我想知道我是否遇到了硬件限制,或者有什么方法可以更好地优化此查询。
SELECT COUNT( DISTINCT a.another_id )
FROM table a
INNER JOIN table b ON a.some_id = '12384211026'
AND b.some_id = '7961985974'
AND a.another_id = b.another_id
查询大约需要 14 秒到 2 分钟才能运行,具体取决于比较的 ID。
有什么建议吗?
更新:这是架构
CREATE TABLE `table` (
`id` BIGINT(55) NOT NULL AUTO_INCREMENT,
`another_id` VARCHAR(50) NOT NULL,
`category_id` VARCHAR(4) NOT NULL,
`name` VARCHAR(255) NOT NULL,
`category` VARCHAR(55) NOT NULL,
`some_id` VARCHAR(50) NOT NULL,
`created_time` VARCHAR(55) NOT NULL,
`processed` SMALLINT(2) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `some` (`another_id`, `some_id`),
INDEX `some_index` (`another_id`, `some_id`, `category_id`, `category`),
FULLTEXT INDEX `name` (`name`),
FULLTEXT INDEX `some_id` (`some_id`),
FULLTEXT INDEX `some_id` (`some_id`),
FULLTEXT INDEX `category_id` (`category_id`),
FULLTEXT INDEX `category` (`category`),
FULLTEXT INDEX `created_time` (`created_time`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=23902326;
最佳答案
基于多个字段的连接,MySQL 可能会非常慢。
此外,您的 DISTINCT
可能比 GROUP
慢。
确保所有字段都已编入索引后,尝试此查询:
SELECT COUNT(`a`.`another_id`)
FROM `table` AS `a`
INNER JOIN `table` AS `b`
ON `a`.`another_id` = `b`.`another_id`
WHERE `a`.`some_id` = '12384211026'
AND `b`.`some_id` = '7961985974'
GROUP BY `a`.`another_id`;
关于php - MySQL 在同一张表上的连接性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20305387/