我有一张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.
这可能是什么原因?
(它可能与查询提取的记录数有关吗?可能是因为分区?)
请帮助。
答案 0 :(得分:3)
索引不保证结果的顺序。索引用于简化搜索。在这种情况下,由于您是通过account_id搜索的,因此这将是唯一可以使用的索引。
如果您希望订购结果,请使用" ORDER BY"子句。
答案 1 :(得分:1)
你误解了索引在MySQL中的作用。索引是一种内部机制,它允许您的数据库在某些字段上执行得更快。
您查询的任何数据都可以任何顺序返回,除非您明确包含ORDER BY
子句。
如果您想按名称对用户进行排序,您的查询将变为SELECT * FROM users WHERE account_id = 56 ORDER BY name ASC
。