我有一个包含一张表和三个的数据库fields (id, hash, creation time)
。
该表有大约 3000 万条记录,执行如下查询的时间为
SELECT * from `table` WHERE hash='blahblahblah';
该查询在安装了 MariaDB 的 1vCPU 1GB Ubuntu 服务器上执行大约需要 40 秒,并且没有安装其他高使用率服务器。
现在,我将服务器升级到 32GB RAM、SSD 和 12 核 Xeon 物理服务器,并在 Ubuntu 20.10 上单独安装了 MariaDB,但执行时间仍然相似。
我尝试增加 50-server.conf 文件中的限制,也增加了 systemctl edit mariadb 中的最大内存,还编辑了 mysql/conf.d 中的 innodb_buffer_pool_size
但还是没运气。有什么方法可以提高我的 MariaDB 速度,以使用整个 CPU 和 RAM 来更快地运行。
答案1
SHOW CREATE TABLE
询问性能时始终提供。
听起来你好像错过了INDEX(hash)
。(PRIMARY KEY(hash)
或者UNIQUE(hash)
,如果存在的话,则是这样的索引。)
答案2
该表大约有 3000 万条记录...
SELECT * from `table` WHERE hash='blahblahblah'; ...
此查询大约需要 40 秒才能执行
是哈希列索引?
40秒声音完全合理让 MariaDB 按顺序搜索 3000 万条记录。
顺便说一句,如果你的桌子真的是,table
那么考虑把它改成别的,如果你非常,非常可能会超过一个表并且数据库中充满了table1
、、table2
等等table3
,很快就会让你头疼。
另外,你应该绝不使用保留字作为表、列等的标识符。
它将要在某个时候回来咬你。