2010-05-18 48 views
14

丢弃MySQL表是否自动删除该表的索引?是否会自动删除该表的索引?

+0

这不是因为特殊的问题,因为我认为这是一读,其实。虽然MySQL的文档没有明确提到DROP TABLE会删除所有索引,但我认为这是隐含的。 – 2010-05-18 00:05:49

回答

15

是的。它会降低索引。这可以验证:

 
CREATE TABLE table1 (foo INT); 
CREATE INDEX ix_table1_foo ON table1 (foo); 
CREATE INDEX ix_table1_foo ON table1 (foo); -- fails: index already exists. 
DROP TABLE table1; 
CREATE TABLE table1 (foo INT); 
CREATE INDEX ix_table1_foo ON table1 (foo); -- succeeds: index does not exist. 

您也可以通过查看information schema验证:

 
CREATE TABLE table1 (foo INT); 
CREATE INDEX ix_table1_foo ON table1 (foo); 

SELECT COUNT(*) 
FROM information_schema.STATISTICS 
WHERE INDEX_NAME = 'ix_table1_foo'; -- returns 1 

DROP TABLE table1; 

SELECT COUNT(*) 
FROM information_schema.STATISTICS 
WHERE INDEX_NAME = 'ix_table1_foo'; -- returns 0 
1

是的,它的确如此。如果没有表格,那么没有理由保留索引。

您可以通过创建MyISAM表并在数据文件夹中查找tablename.MYI来确认。一旦你放弃了这个表格,这个文件就会消失。

1

是的。索引是其所有者表的一部分,并在丢失时与行数据一起释放。

(上引用它会阻止表中的其他表的外键索引被丢弃。)

1

当一个表被丢弃的所有数据,索引和链接的信息将被删除以及。 您可以将此视为一行的级联删除,当您删除一行时,所有链接到它的信息也将被删除(外键等)

相关问题