2011-12-23 2 views
1

Я новичок в Firebird и я бездельничал в это мета-данные, чтобы получить некоторую информацию о структуре таблицы и т.д.Таблица информация кардинальное в Firebird

Моя проблема заключается в том, что я не могу найти какую-то информацию о расчетной мощности стола. Есть ли способ получить эту информацию от Firebird?

Edit:

По мощности я имею в виду количество строк в таблице :) и для моего использования select count(*) не вариант.

ответ

0

Почему бы не использовать запрос:

select count(distinct field_name)/(count(field_name) + 0.0000) from table_name 

Чем ближе результат к 1, тем выше мощность указанного столбца.

+0

@Sorry для смешивания выражений немного - по мощности я имею в виду количества строк в таблице :) – aweis

+0

-> и выберите отсчет (*) считается медленными для моей цели :) – aweis

+0

@aweis Что твое цель? – Harriv

1

Чтобы получить количество строк в таблице вы используете функцию COUNT(), как и в любой другой БД SQL, т.е.

SELECT count(*) FROM table; 
+0

, к сожалению, это выбор, чтобы замедлить – aweis

+1

Нет другого выхода, FB не сохраняйте счет в некоторой таблице sys или какой-то другой ... вы можете использовать триггеры для поддержания «подсчета количества запусков» в какой-либо другой таблице, но это не является релевантным, и вы должны использовать его только в том случае, если вам нужно приблизительное подсчет, а не точное количество записей. – ain

2

Вы можете использовать aproximative метод, используя селективность первичного ключа, как это:

SELECT 
    R.RDB$RELATION_NAME TABLENAME, 
    (
    CASE 
     WHEN I.RDB$STATISTICS = 0 THEN 0 
     ELSE 1/I.RDB$STATISTICS 
    END) AS COUNTRECORDS8 
FROM RDB$RELATIONS R 
    JOIN RDB$RELATION_CONSTRAINTS C ON (R.RDB$RELATION_NAME = C.RDB$RELATION_NAME AND C.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY') 
    JOIN RDB$INDICES I ON (I.RDB$RELATION_NAME = C.RDB$RELATION_NAME AND I.RDB$INDEX_NAME = C.RDB$INDEX_NAME) 
+0

это требует, чтобы все таблицы имели первичный ключ ?, я не могу предположить, что все таблицы имеют первичный ключ или индекс вообще! – aweis

+0

Да. Для этого требуется первичный ключ или уникальный индекс. – tico

+0

Выбирать Cont (*) медленно. Если вам нужна скорость, вы можете создать таблицу с двумя полями «TableName» и «RecordCount» и с триггером для каждой таблицы может поддерживать количество записей. – tico

Смежные вопросы