首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是MySQL索引表?

问什么是MySQL索引表?
EN

Stack Overflow用户
提问于 2009-05-08 19:21:04
回答 1查看 3.1K关注 0票数 1

我需要加快查询速度。索引表是我要找的吗?如果是这样的话,我该怎么做呢?我必须在每次插入时更新它吗?

下面是表模式:

代码语言:javascript
复制
--table1--   |   --tableA--   |    --table2--
id           |   id           |    id
attrib1      |   t1id         |    attrib1
attrib2      |   t2id         |    attrib2
             |   attrib1      |

和查询:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-05-08 19:31:52

您需要在tableA上创建复合索引

代码语言:javascript
复制
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的服务器设置确定,该设置可以从2字节到7字节变化,并且从MySQL 5.0.6开始缺省为6。

这允许创建直到2 ^ (8 * 6) bytes = 256 TB

  • In InnoDB的MyISAM表,所有的表都按PRIMARY KEY进行固有的排序,它不支持按堆组织的表。

因此,每个索引实际上只是一个普通的InnoDB表,由N+M记录的单个PRIMARY KEY组成:N记录是索引值,M记录是保存索引数据的主表记录的PRIMARY KEY。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/841383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档