我想获取tenant_id 的最小user_id。
mysql 引擎-innodb
桌子 -users(id, tenant_id, is_deleted, creation_date)
PK(id)
斯克(tenant_id, creation_date)
查询1select min(id) from users where tenant_id = 123;
查询2 select id from users where tenant_id = 123 order by id limit 1;
我观察到查询 1 比查询 2 更快。另外,如果我在 query2 上强制索引,那么除了使用索引之外,它还会使用文件排序。我想知道为什么query1更快,而在query2中为什么使用filesort作为innodb在sk末尾添加pk。
第一个查询。服务器使用
tenant_id
索引按提供的值过滤行,然后调查作为任何索引一部分的隐藏主键表达式并找到最小的id
。第二次查询。服务器扫描整个表(由于主键,表体中的行已经按 排序
id
)直到tenant_id
找到指定的值。索引 by
(tenant_id, id)
似乎是最有效的。-秋名