为什么我的索引字段是以随机顺序而不是按字母顺序(ASC)顺序返回的?

时间:2015-02-06 12:21:15

标签: mysql

我有一张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. 

这可能是什么原因?

(它可能与查询提取的记录数有关吗?可能是因为分区?)

请帮助。

2 个答案:

答案 0 :(得分:3)

索引不保证结果的顺序。索引用于简化搜索。在这种情况下,由于您是通过account_id搜索的,因此这将是唯一可以使用的索引。

如果您希望订购结果,请使用" ORDER BY"子句。

答案 1 :(得分:1)

你误解了索引在MySQL中的作用。索引是一种内部机制,它允许您的数据库在某些字段上执行得更快。

您查询的任何数据都可以任何顺序返回,除非您明确包含ORDER BY子句。

如果您想按名称对用户进行排序,您的查询将变为SELECT * FROM users WHERE account_id = 56 ORDER BY name ASC