代码之家  ›  专栏  ›  技术社区  ›  TheNone Nabster

mysql中“order by”或“where”后的字段和索引

  •  0
  • TheNone Nabster  · 技术社区  · 16 年前

    “order by”或“where”后面的字段在MySQL中是否有索引(primary、unique、index)?

    考虑具有以下列的表:

    ID | AddedDate | CatID | Title | Description | Status | Editor
    

    在这些查询中, ID , AddedDate CatID 可能有索引?

      SELECT * 
        FROM table WHERE ID = $id
    
    
     SELECT * 
        FROM table 
    ORDER BY ID
    
      SELECT * 
        FROM table 
    ORDER BY AddedDate
    
      SELECT * 
        FROM table 
    ORDER BY CatID
    
    3 回复  |  直到 16 年前
        1
  •  2
  •   Felix Kling    16 年前

    您可以按任何字段排序。如果您想了解更多/其他信息,请澄清我们的问题。

    你可能想读 ORDER BY optimization . 在这里,它表示带有索引的字段甚至可以改进排序,因为不需要做额外的工作(在最佳情况下)。

    更新:

    是的,如果你想的话,你可以添加一个索引(如果这就是你的意思,正如OMG小马指出的,它仍然不清楚)。一般来说,您应该向经常在其中使用的字段添加索引。 WHERE 条款。

        2
  •  0
  •   Andomar    16 年前

    据我所知,订购行有三种基本方法:

    1. 内存排序:将所有行读入内存并对其进行排序。非常快。
    2. 使用排序索引:一次读取一行,查找基表中索引以外的列。
    3. 文件排序:通过一次读取表的一部分来建立排序顺序。这真的很慢。

    对于适合内存的表,MySQL可能会选择选项1。这意味着即使存在索引,它也不会使用索引。索引只是开销。

    但指数对更大的表来说是光芒四射的。如果表对于内存来说太大,MySQL可以避免痛苦的文件排序并依赖于索引。

    这些天,记忆力很强,桌子几乎总是能放进记忆中。我只会在看到文件排序发生后添加用于排序的索引。

        3
  •  0
  •   paulsm4    16 年前

    拥有一个索引的主要好处之一就是它只允许您选择感兴趣的行的子集。使用索引的替代方法是进行“全表扫描”。

    除非你有“Where”条款,否则你 真的会从索引中得到很多好处。