Я нашел JSLint, который помогает исправить много распространенных ошибок и такого; однако, я надеюсь найти что-то, что я могу добавить свои собственные правила и такой, чтобы помочь автоматизировать некоторый материал стандартов кодирования, который моя компания желает реализовать в JavaScript.
, который я должен изучить, это - модель расширяемости больше.
Если вы пытаетесь повысить производительность, вы можете попробовать создать постоянный вычисляемый столбец либо на основе хеша, либо на основе конкатенированного значения двух столбцов.
После сохранения, при условии, что столбец является детерминированный и вы используете «нормальные» настройки базы данных, она может быть проиндексирована и / или по ней может быть создана статистика.
Я считаю, что отдельное количество вычисляемого столбца будет эквивалентно вашему запросу.
Надеюсь, что это сработает, я пишу на prima vista
SELECT COUNT(*)
FROM DocumentOutputItems
GROUP BY DocumentId, DocumentSessionId
В вашем запросе нет ничего плохого, но Вы также можете сделать это следующим образом:
WITH internalQuery (Amount)
AS
(
SELECT (0)
FROM DocumentOutputItems
GROUP BY DocumentId, DocumentSessionId
)
SELECT COUNT(*) AS NumberOfDistinctRows
FROM internalQuery
Как насчет чего-то вроде:
select count(*) from (select count(*) cnt from DocumentOutputItems group by DocumentId, DocumentSessionId) t1
Вероятно, просто делает то же самое, что и вы, хотя и избегает DISTINCT.
, если у вас было только одно поле для «DISTINCT», вы могли бы использовать:
SELECT COUNT(DISTINCT DocumentId)
FROM DocumentOutputItems
, и это действительно возвращает тот же план запроса, что и исходный, как проверено с помощью SET SHOWPLAN_ALL ON. Однако вы используете два поля, поэтому вы можете попробовать что-нибудь безумное, например:
SELECT COUNT(DISTINCT convert(varchar(15),DocumentId)+'|~|'+convert(varchar(15), DocumentSessionId))
FROM DocumentOutputItems
, но у вас будут проблемы, если будут задействованы NULL. Я бы просто придерживался исходного запроса.
Что вам не нравится в существующем запросе? Если вас беспокоит, что DISTINCT
в двух столбцах не возвращает только уникальные перестановки, почему бы не попробовать?
Это определенно работает в Oracle, как и следовало ожидать.
SQL> select distinct deptno, job from emp
2 order by deptno, job
3 /
DEPTNO JOB
---------- ---------
10 CLERK
10 MANAGER
10 PRESIDENT
20 ANALYST
20 CLERK
20 MANAGER
30 CLERK
30 MANAGER
30 SALESMAN
9 rows selected.
SQL> select count(*) from (
2 select distinct deptno, job from emp
3 )
4 /
COUNT(*)
----------
9
SQL>
править
Я пошел в тупик с аналитикой, но ответ был удручающе очевидным ...
SQL> select count(distinct concat(deptno,job)) from emp
2 /
COUNT(DISTINCTCONCAT(DEPTNO,JOB))
---------------------------------
9
SQL>
править 2
Учитывая следующие данные, Приведенное выше решение конкатенации приведет к неправильному подсчету:
col1 col2
---- ----
A AA
AA A
Итак, мы должны включить разделитель ...
select col1 + '*' + col2 from t23
/
Очевидно, что выбранный разделитель должен быть символом или набором символов, которые никогда не могут появиться ни в одном из столбцов.