单个物理 Mysql 实例在大约 100GB 的 2 列表上运行以下查询的速度有多快?
SELECT short_url FROM long_to_short WHERE long_url = :in_long_url
我认识到这仍然遗漏了一些重要的方面 - 索引/数据库设置等。我真的很感激各种风格的细分。
您知道如果我们采用分层存储(SSD + 机械),情况会发生什么变化吗?
单个物理 Mysql 实例在大约 100GB 的 2 列表上运行以下查询的速度有多快?
SELECT short_url FROM long_to_short WHERE long_url = :in_long_url
我认识到这仍然遗漏了一些重要的方面 - 索引/数据库设置等。我真的很感激各种风格的细分。
您知道如果我们采用分层存储(SSD + 机械),情况会发生什么变化吗?
首先,让我们看看数据类型和
INDEX
:long_url VARCHAR(255), INDEX(long_url, short_url)
-- 不太可能足够长,但 10ms HDD 和 1ms SDD。long_url TEXT, INDEX long_url(100)
(或其他一些前缀)——20ms 和 2ms,但很大程度上取决于有多少 long_url 共享相同的前 100 个字符。long_url
——HDD 或 SSD 上可能只有几分钟现在让我们添加 MD5(或 SHAnnn)哈希值:
INDEX(md5, short_url)
-- 与上面的第一个或第二个类似。INDEX(md5), PRIMARY KEY(short_url)
有微妙的不同。UNIQUE(md5), PRIMARY KEY(short_url)
添加了更多问题。INDEX
相对UNIQUE
。UNIQUE
不可能添加前缀(除非您保证前缀是唯一的)INDEX
SELECT
对于上述某些情况,可能会导致从 a 返回多行。RAM,因此设置
immodb_buffer_pool_size
今年的硬件与去年相比——我敢说硬件在过去十年中并没有提高两倍。转向 SSD 是唯一的重大变化。
经验法则: