我有一个users
-表
id INT
account_id INT
name VARCHAR
email VARCHAR
我为(account_id, name)
添加了一个索引,以便用户按name
的字母顺序返回。
然而,在我的一些查询中,用户在name
字段上是按字母顺序返回的,但在其他查询中则不是,而是按随机顺序返回的——而且我的索引似乎没有应用。
SELECT * FROM users WHERE account_id = 56; // Index is applied.
// Sorted by name in ASC order.
SELECT * FROM users WHERE account_id = 110; // Index is not applied.
// Not sorted by name.
这可能是什么原因?
(这可能与查询获取的记录数量有关吗?可能是因为分区吗?)
请帮忙。
索引并不保证结果的顺序。索引用于简化搜索。在这种情况下,由于您是按account_id进行搜索的,因此这将是唯一使用的索引。
如果您希望对结果进行排序,请使用"ORDERBY"子句。
您误解了索引在MySQL中的作用。索引是一种内部机制,它允许数据库在某些字段上执行得更快。
查询的任何数据都可以按任何顺序返回,除非您特别包含ORDER BY
子句。
如果要按名称对用户进行排序,则查询将变为SELECT * FROM users WHERE account_id = 56 ORDER BY name ASC
。