Что действительно “выбирает количество (1) из table_name” на каких-либо средних таблицах базы данных?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

85
задан morgb 23 September 2016 в 15:50
поделиться

8 ответов

Параметр к функции КОЛИЧЕСТВА является выражением, которое должно быть оценено для каждой строки. Функция КОЛИЧЕСТВА возвращает количество строк, для которых выражение оценивает к ненулевому значению. (* специальное выражение, которое не оценено, оно просто возвращает количество строк.)

существует два дополнительных модификатора для выражения: ВСЕ и ОТЛИЧНЫЙ. Они определяют, удалены ли дубликаты. Так как ВСЕ - значение по умолчанию, Ваш пример совпадает с количеством (ВЕСЬ 1), что означает, что дубликаты сохраняются.

, Так как выражение "1" оценивает к непустому указателю для каждой строки, и так как Вы не удаляете дубликаты, КОЛИЧЕСТВО (1) должно всегда возвращать то же число как КОЛИЧЕСТВО (*).

99
ответ дан Jeffrey L Whitledge 24 November 2019 в 08:18
поделиться

Вот ссылка , который поможет ответить на Ваши вопросы. Короче говоря:

количество (*) является корректным способом записать его, и количество (1) ОПТИМИЗИРОВАНО, ЧТОБЫ БЫТЬ количеством (*) внутренне - с тех пор

, a) считают строки, где 1 не является пустым, менее эффективно, чем
, b) считают строки

26
ответ дан Eddie Awad 24 November 2019 в 08:18
поделиться

Различие между количеством (*) и количеством (1) в оракуле?

количество (*) означает, что будет считать все записи т.е. каждую ячейку, НО

количество (1) означает, что добавит один псевдо столбец со значением 1 и количество возвратов всех записей

17
ответ дан 24 November 2019 в 08:18
поделиться

Это подобно различию между

SELECT * FROM table_name and SELECT 1 FROM table_name.  

, Если Вы сделаете

SELECT 1 FROM table_name

, то оно даст Вам номер 1 для каждой строки в таблице. Так да count(*) и count(1) обеспечит те же результаты, как будет count(8) или count(column_name)

8
ответ дан Sarathi Kamaraj 24 November 2019 в 08:18
поделиться

Нет никакого различия.

COUNT(1) в основном просто считает постоянную величину 1 столбцом для каждой строки. Как другие пользователи здесь сказали, это совпадает с COUNT(0) или COUNT(42). Любой не - NULL значение будет достаточен.

http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789

оптимизатор Oracle действительно, по-видимому, использовал для имения ошибок в нем, которые заставили количество быть затронутым, которым столбцом Вы выбрали и было ли это в индексе, таким образом, соглашение КОЛИЧЕСТВА (1) возникло.

6
ответ дан Cade Roux 24 November 2019 в 08:18
поделиться
SELECT COUNT(1) from <table name>

должен сделать ту же самую вещь как

SELECT COUNT(*)  from <table name>

, возможно, было или все еще быть некоторыми причинами, почему она работала бы лучше, чем SELECT COUNT(*) на некоторой базе данных, но я буду полагать что ошибка в DB.

SELECT COUNT(col_name) from <table name>

однако имеет различное значение, поскольку оно считает только строки с ненулевым значением для данного столбца.

5
ответ дан Sarathi Kamaraj 24 November 2019 в 08:18
поделиться

в оракуле я полагаю, что они имеют точно то же значение

2
ответ дан Jarod Elliott 24 November 2019 в 08:18
поделиться

В зависимости от того, кто Вы спрашиваете, некоторые люди сообщают что выполнение select count(1) from random_table; выполнения быстрее, чем select count(*) from random_table. Другие утверждают, что они - точно то же.

Этот ссылка заявления, что разность оборотов между этими 2 происходит из-за ПОЛНОГО СКАНИРОВАНИЯ ТАБЛИЦЫ по сравнению с ПОЛНЫМ СКАНИРОВАНИЕМ FAST.

0
ответ дан Johann Zacharee 24 November 2019 в 08:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: