【发布时间】:2016-04-27 19:48:59
【问题描述】:
我有疑问:
SELECT DISTINCT h.id,
h.host
FROM pozycje p
INNER JOIN hosty h ON p.host_id = h.id
INNER JOIN keywordy k ON k.id=p.key_id
AND k.bing=0
WHERE h.archive_data_checked IS NULL LIMIT 20
存在某些行时速度很快,但如果不存在结果,则需要 2,3 sek 才能执行。我希望不到 1 秒。解释如下:
表 pozycje 有 30 000 000 行,hosty 有 4 000 000 行,keywordy 有 40 000 行。引擎 InnoDB,32GB RAM 服务器
当不存在结果时,我可以做哪些索引或改进来加快查询速度?
编辑:
显示表格关键字;
CREATE TABLE `keywordy` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`main_kw` varchar(255) CHARACTER SET utf8 NOT NULL,
`keyword` varchar(255) CHARACTER SET utf8 NOT NULL,
`lang` varchar(10) CHARACTER SET utf8 NOT NULL,
`searches` int(11) NOT NULL,
`cpc` float NOT NULL,
`competition` float NOT NULL,
`currency` varchar(10) CHARACTER SET utf8 NOT NULL,
`data` date DEFAULT NULL,
`adwords` int(11) NOT NULL,
`monitoring` tinyint(1) NOT NULL DEFAULT '0',
`bing` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `keyword` (`keyword`,`lang`),
KEY `id_bing` (`id`,`bing`)
) ENGINE=InnoDB AUTO_INCREMENT=38362 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
【问题讨论】:
-
您最近是否对这些表中的每一个进行了分析表...。索引看起来不错,但是在 hosty 上的 archive_data_checked 上添加了一个索引,我希望它可以在加入 pozcyje 之前大大减少加入的行数然后到 keywordy
-
显示创建表关键字;
-
分析表从未完成。 SHOW CREATE TABLE 添加了关键字
-
在安静时运行 ANALYZE TABLE 可能是值得的,因为它可能不会使用最新的统计数据来决定要使用哪些索引。并确保在 hosty 上的 archive_data_checked 上有一个索引
标签: mysql query-optimization mariadb