我对为表创建索引感到非常困惑。
假设一个表users有 5 列,id(主键)、name、email、创建日期和更新日期。
id | name | email | creation_date | update_date
Run Code Online (Sandbox Code Playgroud)
最初的问题是关于为所有列创建索引(多列索引)。这通常是个好主意吗?(显然对于列数较少的表)
我知道您可能会问这取决于查询,但让我们假设以下查询:
1. SELECT * FROM users where creation_date < 'A DATE'
2. SELECT id, email from users where name = 'SOME NAMES';
3. SELECT id, email from users where name = 'SOME NAMES' ORDER BY creation_date DESC;
4. SELECT id, email from users where name = 'SOME NAMES' AND creation_date >= 'SOME DATES' ORDER BY updated_date ASC;
Run Code Online (Sandbox Code Playgroud)
我打算避免的是为上面的每个查询创建多个索引。那么我们是否可以创建一个由所有列组成的多列索引来覆盖上面的所有查询呢?
网络中分散信息的下一个问题是关于索引中列的顺序。这与 WHERE 子句后面的参数相同吗?ORDER BY 怎么样?我们需要在多列索引中考虑这一点吗?