Я использовал оба и предпочитаю NAnt . Мне действительно трудно сказать, что одно "лучше", чем другое.
Если вы используете MySQL, вы можете запустить SHOW KEYS FROM table
или SHOW INDEXES FROM table
On SQL Server, this will list all the indexes for a specified table:
select * from sys.indexes
where object_id = (select object_id from sys.objects where name = 'MYTABLE')
This query will list all tables without an index:
SELECT name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0
And this is an interesting MSDN FAQ on a related subject:
Querying the SQL Server System Catalog FAQ
Большинство современных СУБД поддерживают схему INFORMATION_SCHEMA
. Если ваш поддерживает это, вам нужно либо INFORMATION_SCHEMA.TABLE_CONSTRAINTS
, либо INFORMATION_SCHEMA.KEY_COLUMN_USAGE
, или, может быть, оба варианта.
Чтобы проверить, поддерживает ли ваша система, достаточно просто запустить
выберите count (*) из INFORMATION_SCHEMA.TABLE_CONSTRAINTS
РЕДАКТИРОВАТЬ: SQL Server действительно имеет INFORMATION_SCHEMA
, и его проще использовать, чем их таблицы, зависящие от поставщика, так что просто используйте его.
В Oracle:
Определить все индексы в таблице:
SELECT index_name
ОТ user_indexes
ГДЕ table_name =: таблица
Определение индексов столбцов и столбцов по индексу:
ВЫБРАТЬ имя_индекса
, column_position
, имя_столбца
ОТ user_ind_columns
ГДЕ table_name =: таблица
ORDER BY index_name, column_order
Ссылки: