MySQL Innodb索引混乱
MySQL Innodb indexing confusion
一个非常基本的数据库设计问题:
我正在创建一个非常大的 table,其中包含以下列:Employee_Name(VARCHAR)、Employee_ID(INT)、Employee_Birthday(INT)。
我希望为 Employee_ID 创建单列 b 树索引,因为我的许多查询都使用 SELECT 和基于此列中的值的 WHERE 子句。
尽管 Employee_ID 创建后我不会更新,但我会经常将新员工的信息插入此 table。
与没有索引相比,添加带有索引列的行是否会产生额外的成本?还是仅在更新现有行时才会产生额外费用?
在评估索引的创建时,关键问题是:此 table 主要用于查询还是用于插入。此外,您需要说明 非常大 table 的含义(因为您在谈论员工,我猜 table 可能会主持,少于 100K 条记录,对吗?)。如果您希望每个 SELECT 有数千个 INSERT,您可以尝试不使用索引。另一方面,如果您将主要查询 table,则在您的列 Employee_ID
中设置索引是可行的方法。
根据典型的SELECTs
、UPDATEs
和DELETEs
创建索引。不用担心INSERTs
;一个 INSERT
的开销比其他操作的加速要少很多。
有了 InnoDB,总有一个 PRIMARY KEY
,所以你不妨把它做成对你有用的东西。
一个非常基本的数据库设计问题:
我正在创建一个非常大的 table,其中包含以下列:Employee_Name(VARCHAR)、Employee_ID(INT)、Employee_Birthday(INT)。
我希望为 Employee_ID 创建单列 b 树索引,因为我的许多查询都使用 SELECT 和基于此列中的值的 WHERE 子句。
尽管 Employee_ID 创建后我不会更新,但我会经常将新员工的信息插入此 table。
与没有索引相比,添加带有索引列的行是否会产生额外的成本?还是仅在更新现有行时才会产生额外费用?
在评估索引的创建时,关键问题是:此 table 主要用于查询还是用于插入。此外,您需要说明 非常大 table 的含义(因为您在谈论员工,我猜 table 可能会主持,少于 100K 条记录,对吗?)。如果您希望每个 SELECT 有数千个 INSERT,您可以尝试不使用索引。另一方面,如果您将主要查询 table,则在您的列 Employee_ID
中设置索引是可行的方法。
根据典型的SELECTs
、UPDATEs
和DELETEs
创建索引。不用担心INSERTs
;一个 INSERT
的开销比其他操作的加速要少很多。
有了 InnoDB,总有一个 PRIMARY KEY
,所以你不妨把它做成对你有用的东西。