一个非常基本的数据库设计问题:
我正在使用以下列创建一个非常大的表:Employee_Name(VARCHAR),Employee_ID(INT),Employee_Birthday(INT)。
我希望为Employee_ID创建单列b-tree索引,因为我的许多查询都根据此列中的值使用SELECT和WHERE子句。
虽然创建后我不会更新Employee_ID,但我会经常将新员工插入此表。
与没有索引相比,添加带索引列的行是否会产生额外成本?或者,仅在更新现有行时才会应用额外费用吗?
答案 0 :(得分:2)
根据典型的SELECTs
,UPDATEs
和DELETEs
创建索引。不要担心INSERTs
;一个INSERT
的开销远远低于其他操作的加速。
使用InnoDB,总会有一个PRIMARY KEY
,所以你也可以为它做一些有用的事情。
答案 1 :(得分:1)
在评估索引的创建时,KEY问题是:对于查询或INSERTIONS,是否会访问此表。此外,您需要指定非常大的表的含义(因为您正在谈论员工,我猜这个表可能会托管少于100K的记录,对吧?)。如果您希望每个SELECT有数千个INSERT,那么您可以尝试不使用索引。另一方面,如果您将主要查询表格,则在列Employee_ID
中设置索引是可行的方法。