sql - 什么是 MySQL 索引表?

标签 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

最佳答案

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

CREATE INDEX ix_tablea_t1id_t2id ON table_A (t1id, t2id)

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

MySQL 不使用术语索引表

此术语由 Oracle 用来指代其他数据库所称的 CLUSTERED INDEX:一种表,其中记录本身根据列的值排列(或一组列)。

MySQL 中:

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

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

    指针的大小由名为 myisam_data_pointer_size 的服务器设置决定,它可以从 27 字节不等,默认为6MySQL 5.0.6 以来。

    这允许创建最多 2 ^ (8 * 6) 字节 = 256 TB

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

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

    /li>

关于sql - 什么是 MySQL 索引表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841383/

相关文章:

sql - 选择常量作为伪列并对伪列进行算术运算

java - Spring数据@公式计数查询

php - 使用 php 列表加速 jquery 自动完成

mysql - Drupal db_select + MySQL 中的索引提示?

mysql - 如果我正在访问的字段是复合索引的一部分,我是否仍能从仅引用其中一个字段的索引中受益?

mysql - 如何从 MYSQL 中的一张表更新另一张表?具有额外值(value)

MySQL 通过键选择行或回退到默认键选择

php - mysql查询失败打扰我

mysql 基于多个条件的索引/排序数据

sql - 如何统计SQL Server中数据库的所有存储过程?