什么是MySQL索引表?

时间:2009-05-08 19:21:04

标签: sql mysql indexing query-optimization

我需要加快查询速度。索引表是我正在寻找的吗?如果是这样,我该怎么做?每次插入都需要更新吗?

以下是表格模式:

--table1--   |   --tableA--   |    --table2--
id           |   id           |    id
attrib1      |   t1id         |    attrib1
attrib2      |   t2id         |    attrib2
             |   attrib1      |

查询:

SELECT 
  table1.attrib1, 
  table1.attrib2,
  tableA.attrib1 
FROM 
  table1,
  tableA
WHERE 
  table1.id = tableA.t1id
  AND (tableA.t2id = x or ... or tableA.t2id = z)
GROUP BY 
  table1.id

1 个答案:

答案 0 :(得分:7)

您需要在tableA上创建综合索引:

CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)

MySQL中的索引被视为表的一部分:它们会自动更新,并在优化程序决定使用它们时自动使用。

MySQL不使用术语index table

Oracle使用此术语来引用其他数据库调用CLUSTERED INDEX的内容:一种表,其中记录本身根据列(或一组列)的值排列

MySQL

  • 使用MyISAM存储时,会将索引创建为具有.MYI扩展名的单独文件。

    此文件的内容表示B-Tree,每个叶子包含索引键和指向.MYD文件中包含数据的偏移量的指针。

    指针的大小由名为myisam_data_pointer_size的服务器设置决定,该设置可以从27字节不等,默认为6,因为{{1 }}

    这样可以创建MySQL 5.0.6表格,最多MyISAM = 2 ^ (8 * 6) bytes

  • 256 TB中,所有表都由InnoDB固有地排序,它不支持堆组织表。

    因此,每个索引实际上只是一个简单的PRIMARY KEY表,由InnoDBPRIMARY KEYN+M个记录组成:N个记录是索引值,{ {1}}记录为保存索引数据的主表记录的M