[英]MySQL extremely slow on a very simple query
在一个小表(115k 条记录)中运行一个非常简单的查询时,我的响应速度非常慢......响应大约需要 8 秒,我不明白为什么要花这么长时间。 任何建议都会很棒
桌子:
CREATE TABLE `financeiro_fluxo` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`branch` int(10) unsigned NOT NULL,
`abertura` int(10) DEFAULT NULL,
`origem` int(10) unsigned DEFAULT NULL,
`status_pagamento` tinyint(3) unsigned DEFAULT NULL,
`conta` int(10) unsigned NOT NULL,
`tipo_lancamento` tinyint(3) unsigned NOT NULL,
`categoria` int(10) unsigned NOT NULL,
`tipo_entidade` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`entidade` int(10) unsigned DEFAULT NULL,
`entidade_input` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`tipo_pagamento` tinyint(3) unsigned NOT NULL,
`parcela` smallint(5) unsigned NOT NULL,
`parcelas` smallint(5) unsigned NOT NULL,
`valor` decimal(12,2) NOT NULL,
`valor_taxa` decimal(12,2) DEFAULT NULL,
`valor_troco` decimal(12,2) DEFAULT NULL,
`confirmado` tinyint(3) unsigned DEFAULT NULL,
`data_confirmacao` datetime DEFAULT NULL,
`vencimento` date NOT NULL,
`info` varchar(510) COLLATE utf8_unicode_ci DEFAULT NULL,
`bandeira` int(10) unsigned DEFAULT NULL,
`user_add` int(10) unsigned NOT NULL,
`user_last` int(10) unsigned NOT NULL,
`param_ref` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
`param` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`file` int(10) unsigned DEFAULT NULL,
`date_created` datetime NOT NULL,
`date_modified` datetime NOT NULL,
`status` smallint(6) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=116749 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
询问:
SELECT * from financeiro_fluxo
解释:
id select_type table type key key_len rows
1 SIMPLE financeiro_fluxo ALL 116244
在具有相同表的本地主机上运行的相同查询在不到一秒内返回...
轮廓:
似乎您正在进行全表扫描,因为您的查询不包含任何限制条件(例如 WHERE 子句或 LIMIT)。 为了让查询更好地使用具有某种标准的索引列。 如果添加WHERE id IS NOT NULL
会发生什么
我假设您需要所有记录,如果不通过更具体的 WHERE 子句(在索引列上)或 LIMIT 子句中添加的条件来限制结果集。
“报告”会汇总数据吗? 因此,您可以通过在服务器上做更多的工作来加快 8 秒(远程)查询的速度,从而减少网络传输的数据。
也就是想想AVG(..), COUNT(*), SUM(..), MAX(..)
等是否可以在SELECT
中完成。
再迈出一步……建立并维护一个包含小计(等)的“汇总表”。 然后,读取(或扫描)汇总表并汇总小计等,在服务器中和通过网络都会更快。
(而且我同意需要避免*
,并且 8 秒可能是由于网络延迟(和“带宽”)。服务器的地理位置在哪里? SELECT 1;
需要多长时间?)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.