【发布时间】:2018-06-20 20:09:46
【问题描述】:
我想 mariadb 的工作方式类似于 mysql,这就是我正在使用的,而且我知道有一个缓存系统。
我的问题和我不明白的是,我刷新的页面需要很长时间才能刷新,但时间根本不是恒定的。稍后详细说明。
在页面 A:
85% 的时间,执行大约需要 7 秒。
10% 的时间,大约需要 27 秒。
5% 的时间不到 1 秒(当我以非常短的间隔刷新时)。
在 B 页上:
80% 的时间,大约需要 5 秒。
有时大约是 2.5 秒。
有时不到一秒。
有一次超过 60 秒,触发错误。
我的代码没有变化,只是观察和 F5 刷新。
详情:
我有一个 MyISAM 表,每天大约有 150k 新行(“插入”)。 我希望每分钟查询一次该表(“选择”)。 它一次可以拥有的最大行数可能在 50,000,000 到 4,750,000,000 之间... 我正在使用 PHP 在同一台服务器上运行查询。
我目前使用的结构:
CREATE TABLE `ticks` (
`primary` int(11) NOT NULL AUTO_INCREMENT,
`datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`pairs` text NOT NULL,
`price` decimal(18,8) NOT NULL,
`daily_volume` decimal(36,8) NOT NULL,
PRIMARY KEY (`primary`),
KEY `datetime` (`datetime`)
) ENGINE=MyISAM AUTO_INCREMENT=4007125 DEFAULT CHARSET=latin1
数据样本:
|primary | datetime | pairs | price | volume |
-------------------------------------------------------------------------------
|5810228 | 20/01/2018 21:34:02 | BTC_HUC | 0.00002617 | 6.08607929 |
|5810213 | 20/01/2018 21:34:02 | BTC_BELA | 0.00002733 | 8.83542600 |
|5810224 | 20/01/2018 21:34:02 | BTC_FLDC | 0.00000374 | 12.72654326 |
|5810234 | 20/01/2018 21:34:02 | BTC_NMC | 0.00037099 | 4.06446745 |
|5810219 | 20/01/2018 21:34:02 | BTC_CLAM | 0.00070798 | 13.65356478 |
|5810220 | 20/01/2018 21:34:02 | BTC_DASH | 0.07280004 | 423.88604591 |
|1706999 | 11/01/2018 17:09:01 | USDT_BTC | 13590.45341401 | 398959280.2620621|
我在日期时间创建了一个索引(“正常”索引)。
使用 pdo 运行页面 A 上的查询需要 7 秒,但在 phpmyadmin 中约为 0.0007:
SELECT DISTINCT(pairs)
FROM ticks
自从我为日期时间编制索引以来,第一次查询后的每次繁重计算大部分时间总共需要约 0.5 秒。
但是,由于未知原因,有时运行时间会延长 25 到 35 倍。这是使用的查询(循环运行 100 次):
SELECT datetime, price
FROM ticks
WHERE datetime <= DATE_SUB(NOW(),INTERVAL 1 MINUTE)
AND pairs = \''.$data['pairs'].'\'
ORDER BY datetime DESC
LIMIT 1
我不会进一步解释页面 B,因为该页面对我来说不太重要,而且我对与在此页面上进行的操作数量相关的平均执行时间感到满意。我唯一的疑问是这里也可能发生广泛的执行时间。
问题:
1-执行时间差异怎么会这么大,我怎么能让我的页面在 1 秒内运行,因为它有时会发生?我的 sql 查询仅在数据库上就非常简单和快速。我相信db和php服务器位于同一台机器上。
特别是,我想知道为什么使用 pdo 的查询运行速度比使用 phpmyadmin 慢 10,000。 7/0.0007 是 10k,这里肯定有很大的问题。
索引对不会改变任何东西。
2-您是否在我的解释中发现了任何可能导致修复和改进性能的不正确之处?你有什么特别的建议可以在本案例中提高性能吗?例如,我一直想知道 MyISAM 在我的情况下是否有效(我相信如此)。
【问题讨论】:
标签: php sql pdo phpmyadmin mariadb