我是否需要为具有单行的MySQL表定义索引(设置表)

时间:2011-05-19 03:45:06

标签: mysql sql indexing

出于性能/优化原因,我是否需要为单行(设置表)定义MySQL表的索引?

2 个答案:

答案 0 :(得分:2)

如果它有一行就没有意义,因为无论如何整个表都会被seq扫描。

答案 1 :(得分:1)

这是所有关系数据库的一个非常常见的问题。在读取几页数据时,PostgreSQL's query planner会故意使用索引,因为在执行索引扫描而不是简单的顺序扫描时性能会受到影响。我希望在这种情况下几乎所有数据库(具有最小的智能)都会做同样的事情。

修辞:为什么在只执行一次并扫描8K数据时执行多次read(2)调用?上下文切换,操作系统文件系统缓存等。有可能索引的页面已经在缓存中,因此在更大的方案中优化非常小。为一行数据保存两个缓存命中与仅一个缓存命中...谁关心?

特别是对于MySQL,MyISAM或InnoDB设置了file-per-table选项,您不需要索引(如果您将所有数据都放在一个InnoDB中,我不确定您是否需要索引文件)。