【发布时间】:2012-04-28 04:02:18
【问题描述】:
我有一个带有一个索引的数据库表,其中键名是 PRIMARY,类型是 BTREE,唯一是 YES,打包是 NO,列是 ID,基数是 728,排序规则是 A。
我有一个在页面加载时运行的脚本,它将条目添加到 MySQL 数据库表中,并从数据库表中删除重复项。
以下是删除重复项的脚本部分:
// Removes Duplicates from the MySQL Database Table
// Removes Duplicates from the MySQL Database Table based on 'Entry_Date' field
mysql_query("Alter IGNORE table $TableName add unique key (Entry_Date)");
// Deletes the added index created by the Removes Duplicates function
mysql_query("ALTER TABLE $TableName DROP INDEX Entry_Date");
使用上面的 Remove Duplicates 命令,一个额外的索引被添加到表中。下一行命令是假设删除这个添加的索引。
问题在于,有时由 Removes Duplicates 命令创建的添加索引不会被以下 Delete added index 命令删除,因此会向表中添加更多索引。在我手动删除添加的索引之前,这些额外的索引会阻止脚本向数据库添加额外的数据。
我的问题: 有没有我可以添加到脚本中的命令或短函数来删除除本文开头提到的原始索引之外的所有索引?
我确实阅读了以下帖子,但我不知道这是否是要使用的正确脚本: How to drop all of the indexes except primary keys with single query
【问题讨论】:
-
我不认为它是用于 MySQL 的。它声明它适用于 SQL Server
-
对不起@sammy,我错过了这一点。
-
为什么要不断地添加和删除唯一索引?首先,您不应该让那些重复项出现在那里。只需保留唯一键并在插入新行时处理错误。这样会更有效率。
-
如帖子中所述从 MySQL 数据库表中删除重复项命令:mysql_query("Alter IGNORE table $TableName add unique key (Entry_Date)");自动添加附加索引。
-
@Sammy: 再说一遍:不要通过不删除唯一索引,让那些重复项一开始就进入表中。
标签: mysql indexing sql-delete