2015-02-06 30 views
0

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

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. 

这可能是什么原因?

(难道是相关的查询获取的记录数?难道是因为分区的?)

请帮助。

+1

试着谷歌索引基数,看看MySQL可能会决定不使用索引。另外,在提出有关MySQL和SELECT的问题时,请张贴'EXPLAIN'的输出。 – 2015-02-06 13:21:56

回答

3

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

如果您想要订购结果,请使用“ORDER BY”子句。

+0

Thankyou。如果我使用“order by”,我的问题就解决了。但是,我想知道为什么索引仅适用于少数查询,为什么不适用于其他几个查询。 – ramya 2015-02-06 12:45:55

+1

这与指数无关。结果以字母顺序返回的事实很可能完全是巧合。 – Eilidh 2015-02-06 12:49:00

1

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

您查询的任何数据都可以在任意订单中返回,除非您特别包含ORDER BY子句。

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