Mariadb:我可以通过使用不同顺序的多个列索引来提高性能吗?

Wol*_*777 2 mariadb performance index index-tuning

在我的 Mariadb 表中,我有两个 id 列(A,B),它们组合起来是唯一的,但不是单独的。这张桌子相当大。为了加快查询速度,例如

SELECT B WHERE A=?
Run Code Online (Sandbox Code Playgroud)

我添加了一个主键(A,B),效果很好。但有时我也需要查询

SELECT A WHERE B=? 
Run Code Online (Sandbox Code Playgroud)

这是相当慢的。提高性能的最佳方法是什么?在表上创建第二个唯一索引(B,A)是否合理?

此外,如果我确实创建了第二个索引,由于检查了两个索引,因此向表中插入条目是否会变慢?理论上,检查 (A,B) 是否唯一意味着 (B,A) 是唯一的,但是 Mariadb 是否知道这一点,还是同时检查两者?

J.D*_*.D. 5

在表上创建第二个唯一索引(B,A)是否合理?

是的,因为第二个查询的子句中的谓词WHERE位于列上B,并且以列A(即(A, B))开头的原始索引将无法为此查询进行查找。因此,您当前可能遇到性能较差的索引扫描。

此外,如果我确实创建了第二个索引,向表中插入条目是否会变慢......

是的。

...既然两个索引都被检查了?

与其说是因为对唯一性的冗余检查,不如说是因为现在维护两个索引需要额外的写入开销。但一般来说,除非您每秒写入数百万条记录,否则这种开销可以忽略不计。

不过,索引不足和索引过多之间存在总体平衡。这取决于查询用例、读取与写入工作负载、数据库服务器背后的基础设施以及可接受的运行时。通常,一个表上最多 5 个索引就可以,每个索引最多 5 列(为了了解索引宽度)就可以。但这是一个非常宽松的准则,有时对于特定表的用例来说,更少或更多是正确的数字。