考虑一个id
带有PRIMARY KEY
索引的表:
CREATE TABLE test (id INT PRIMARY KEY)
现在考虑像这样的查询
SELECT COUNT(*) FROM test
SELECT * FROM test ORDER BY id LIMIT ?, 1
(使用 MySQL 语法LIMIT
:?
是偏移量)
看起来,尽管表上有索引(在 上id
),但这些查询(计算行数或在偏移处选择行)都需要线性时间,因为它们必须执行完整或部分表扫描;在排序顺序中的行的“等级”/位置上没有索引,这将有助于按等级计数或获取元素(与 Redis 的排序集相比,它允许有效地按等级进行操作)。
问题在于(通常是 B 树)索引仅限于id
并且根本没有“增强”以包含计数/排名。我研究过 SQLite、MySQL / MariaDB 和 PostgreSQL,这些 DBMS 似乎都不允许增加索引以包含计数/排名。
我的问题是:
- 是否可以扩充 SQLite、MySQL / MariaDB 或 PostgreSQL 使用的 B 树索引以包含计数?
- 如果没有,是否有另一种使用 SQL 作为查询语言的关系 DBMS 支持此类索引?