我有一段時間運行的MySQL數據庫,其中有許多更改。最近我查看了一下,發現在某些情況下,我在同一個領域的指數翻了一番。一些索引缺失,並且通常在所有索引中都有很大的混亂。MySQL從表中刪除所有索引
我想刪除表中的所有索引。稍後,我有一個準備好的腳本,它將運行ALTER TABLE
並添加相關索引。
有沒有辦法從表中刪除所有索引?
我有一段時間運行的MySQL數據庫,其中有許多更改。最近我查看了一下,發現在某些情況下,我在同一個領域的指數翻了一番。一些索引缺失,並且通常在所有索引中都有很大的混亂。MySQL從表中刪除所有索引
我想刪除表中的所有索引。稍後,我有一個準備好的腳本,它將運行ALTER TABLE
並添加相關索引。
有沒有辦法從表中刪除所有索引?
如果你有phpmyadmin或任何類似的工具,你可以很容易地以圖形的方式做到這一點。
或每指數做類似
ALTER TABLE `table` DROP INDEX `NameIndex`
您可以
SHOW INDEX FROM `table`
拿到指標無心不是一個命令。 然而,你可以編寫一個腳本來顯示所有的數據庫,顯示數據庫中的所有表,顯示這些表中的所有索引並全部刪除它們。 但我不會爲你寫,如果你不開始接受一些答案。 您也可以使用phpmyadmin或其他圖形工具爲每個表格選擇這個整齊的「全選」框。
首先感謝您的回答。第二我接受答案,因爲答案真的回答並給出了問題的解決方案。無論如何,我可以自己寫腳本,但感謝提供。希望有一種方法可以這樣做(刪除所有索引)。 – aviv 2010-09-26 16:09:33
好吧......多數民衆贊成在正確的。 54%對我來說看起來有點少,但如果它像這樣完全沒問題的話。 loic發佈了命令列出索引,祝你的腳本好運 – 2010-09-26 17:52:20
在Ruby on Rails的我這樣做:
indexes = ActiveRecord::Base.connection.execute("SHOW INDEX FROM tablename")
indexes.each do |index|
ActiveRecord::Base.connection.execute("ALTER TABLE tablename DROP INDEX #{index[2]};")
end
簡單腳本:
-- list all non-unique indexes
SELECT table_name AS `Table`,
index_name AS `Index`,
GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE NON_UNIQUE = 1 AND table_schema = 'mydatabase' AND table_name = 'mytable'
GROUP BY 1,2;
-- drop all non-unique indexes
SET SESSION group_concat_max_len=10240;
SELECT CONCAT('ALTER TABLE ', `Table`, ' DROP INDEX ', GROUP_CONCAT(`Index` SEPARATOR ', DROP INDEX '),';')
FROM (
SELECT table_name AS `Table`,
index_name AS `Index`
FROM information_schema.statistics
WHERE NON_UNIQUE = 1 AND table_schema = 'mydatabase' AND table_name = 'mytable'
GROUP BY `Table`, `Index`) AS tmp
GROUP BY `Table`;
-- add all non-unique indexes , WITHOUT index length spec
SET SESSION group_concat_max_len=10240;
SELECT CONCAT('ALTER TABLE ', `Table`, ' ADD INDEX ', GROUP_CONCAT(CONCAT(`Index`, '(', `Columns`, ')') SEPARATOR ',\n ADD INDEX '))
FROM (
SELECT table_name AS `Table`,
index_name AS `Index`,
GROUP_CONCAT(column_name ORDER BY seq_in_index) AS `Columns`
FROM information_schema.statistics
WHERE NON_UNIQUE = 1 AND table_schema = 'mydatabase' AND table_name = 'mytable'
GROUP BY `Table`, `Index`) AS tmp
GROUP BY `Table`;
您也可以在一個查詢,例如跌幅超過一個索引'ALTER TABLE表DROP INDEX第一,DROP INDEX第二,DROP INDEX第三'等等。 – techouse 2015-09-02 19:33:23
在phpMyAdmin中它是如何「非常容易」的? – User 2015-10-16 03:39:43