MySQL存储过程在服务器上花费的时间比localhost长得多
我创建了一个存储过程,其中包含一个在localhost上运行的查询: 在00065s 01426s中获取21行 和在服务器上: 在00037s 159947s中获取21行 我尝试了以下选项以在localhost上获得与服务器相同的结果: SQL\u无\u缓存 重置缓存 刷新缓存 但是它没有给我相同的结果,所以我想知道为什么服务器上运行的查询会慢得多 我已经做了一个解释,但不知道我能从中准备什么:MySQL存储过程在服务器上花费的时间比localhost长得多,mysql,webserver,localhost,Mysql,Webserver,Localhost,我创建了一个存储过程,其中包含一个在localhost上运行的查询: 在00065s 01426s中获取21行 和在服务器上: 在00037s 159947s中获取21行 我尝试了以下选项以在localhost上获得与服务器相同的结果: SQL\u无\u缓存 重置缓存 刷新缓存 但是它没有给我相同的结果,所以我想知道为什么服务器上运行的查询会慢得多 我已经做了一个解释,但不知道我能从中准备什么: 1, 'PRIMARY', '<derived2>', 'ALL', '', '', '
1, 'PRIMARY', '<derived2>', 'ALL', '', '', '', '', 16106, 100.00, 'Using temporary; Using filesort'
1, 'PRIMARY', 'A', 'ALL', 'PRIMARY', '', '', '', 5214, 100.00, 'Using where; Using join buffer'
2, 'DERIVED', 'T', 'ALL', 'PRIMARY', '', '', '', 76211, 100.00, 'Using wher
e'
这是我正在运行的查询:
SELECT
`A`.`country_description`,
SUM(`turnover_ytd`) AS `turnover_currentyear_ytd`,
SUM(`turnover_ly`) AS `turnover_lastyear_ytd`,
SUM(`turnover_sly`) AS `turnover_2ndlastyear_ytd`,
SUM(`turnover_ytd`) AS `volume_currentyear_ytd`,
SUM(`turnover_ly`) AS `volume_lastyear_ytd`,
SUM(`turnover_sly`) AS `volume_2ndlastyear_ytd`,
COALESCE(((SUM(`turnover_ytd`)-SUM(`turnover_ly`))/SUM(`turnover_ly`))*100, 0) AS `turnover_percentage_currentandlastyear_ytd`,
COALESCE(((SUM(`volume_ytd`)-SUM(`volume_ly`))/SUM(`volume_ly`))*100, 0) AS `volume_percentage_currentandlastyear_ytd`,
COALESCE(((SUM(`turnover_ly`)-SUM(`turnover_sly`))/SUM(`turnover_sly`))*100, 0) AS `turnover_percentage_lastand2ndlastyear_ytd`,
COALESCE(((SUM(`volume_ly`)-SUM(`volume_sly`))/SUM(`volume_sly`))*100, 0) AS `volume_percentage_lastand2ndlastyear_ytd`
FROM
`agent` AS `A`
INNER JOIN
(
SELECT
`debtor_number`,
IF(SUBSTR(`period`,1,4) = SUBSTR(201210,1,4), `turnover_ytd`, 0) AS `turnover_ytd`,
IF(SUBSTR(`period`,1,4) = SUBSTR(201210-100,1,4), `turnover_ytd`, 0) AS `turnover_ly`,
IF(SUBSTR(`period`,1,4) = SUBSTR(201210-200,1,4), `turnover_ytd`, 0) AS `turnover_sly`,
IF(SUBSTR(`period`,1,4) = SUBSTR(201210,1,4), `volume_ytd`, 0) AS `volume_ytd`,
IF(SUBSTR(`period`,1,4) = SUBSTR(201210-100,1,4), `volume_ytd`, 0) AS `volume_ly`,
IF(SUBSTR(`period`,1,4) = SUBSTR(201210-200,1,4), `volume_ytd`, 0) AS `volume_sly`
FROM
`turnover_volume` AS `T`
WHERE
`company_number` = 01
AND
SUBSTR(`period`,5,2) <= SUBSTR(201210,5,2)
AND
SUBSTR(`period`,1,4) IN (SUBSTR(201210,1,4), SUBSTR(201210-100,1,4), SUBSTR(201210-200,1,4))
AND
`turnover_ytd` != 0
AND
`volume_ytd` != 0
) AS `T` ON (`T`.`debtor_number` = `A`.`debtor_number`)
WHERE
`A`.`agent_number` = 003
GROUP BY
`A`.`country_description`;
服务器规格包括:
主机是运行ESX的物理服务器,而Web服务器实际上是作为ESX中的客户机运行的
主机规格为:
品牌和类型:Altos R720
CPU:Xeon E5404 2ghz
存储:通过Iscsi通过存储连接。埃特努斯DX80
内存:6GB
客户规格为:
CPU:2x vCPU
内存:2GB
操作系统is:Red Hat 4.1.2-44
除了这些规格之外,来宾还可以无限访问主机
我的本地电脑规格是:
CPU:Intel Core 2四CPU Q9300@2.50GHz
内存:3 GB
操作系统:Windows 7 32位
非常感谢您的帮助。与本地机器相比,您是否考虑过服务器的硬件
这是一个共享主机包吗?专用服务器?云 我发现了问题,不知何故,Web服务器上的排序规则类型与我的localhost数据库不同 在localhost上,我有: 拉丁语和瑞典语 在服务器上,它是: utf8\u unicode\u ci 表上的引擎也不同,服务器上的InnoDB和MyIsam
这导致通过检查不同排序规则类型之间的转换来降低查询速度。这是一台Linux服务器,在我们的办公室本地运行:Linux版本2.6.18-128.1.1.el5mockbuild@hs20-bc1-5.build.redhat.com gcc版本4.1.2 20080704 Red Hat 4.1.2-44 1 SMP周一1月26日13:59:00美国东部时间2009年1月26日,MySQL:MySQL版本14.14发行版5.1.50,对于使用readline 5.1的redhat linux gnu i686,您可以使用Ram、CPU、,操作系统,它是共享的还是专用于本地服务器和实时服务器?我已经用规范更新了我的问题,你能再看看这个问题吗?