Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Посмотрите, что MySQL Why мог быть медленным с большим КОЛИЧЕСТВОМ таблиц и (*) по сравнению с КОЛИЧЕСТВОМ (седло)
, Удостоверяются, что у Вас есть индекс на столбце, который Вы считаете. Если Ваш сервер имеет много RAM, рассмотрите размер буфера увеличивающегося MySQL. Удостоверьтесь, что Ваши диски настроены правильно - DMA включил, не совместно использовав диск или кабель с разделом подкачки, и т.д.
То, что Вы спрашиваете с "ИЗБРАННЫМ КОЛИЧЕСТВОМ (*)", не легко.
MySQL In, MyISAM нетранзакционный механизм оптимизирует это путем проведения подсчета записей, таким образом, ИЗБРАННЫЙ ПОДСЧЕТ (*) будет очень быстр.
Однако при использовании транзакционного механизма ВЫБЕРИТЕ КОЛИЧЕСТВО (*), в основном говорит:
Точно, сколько записей существует в этой таблице в моя транзакция ?
, Чтобы сделать это, механизм должен просканировать всю таблицу; это, вероятно, знает примерно, сколько записей уже существует в таблице, но получить точный ответ для конкретной транзакции, этому нужно сканирование. Это не будет быстрым MySQL использования innodb, это не будет быстрым в Oracle или чем-либо еще. Целая таблица MUST быть считанным (исключая вещи, сохраненные отдельно механизмом, такие как БЛОБЫ)
, Наличие целой таблицы в поршне сделает его немного быстрее, но это все еще не будет быстрым.
, Если Ваше приложение полагается на частые, точные количества, можно хотеть сделать сводную таблицу, которая обновляется триггером или некоторыми другими средствами.
, Если Ваше приложение полагается на частые, менее точные количества, Вы могли бы поддержать сводные данные с запланированной задачей (который может повлиять на выполнение других операций меньше).
Много проблем производительности вокруг больших таблиц касаются индексации проблем или отсутствия индексации всех вместе. Я определенно удостоверился бы, что Вы знакомы с индексацией методов и специфических особенностей базы данных, которую Вы планируете использовать.
Относительно Вашего медленного количества (*) на огромной таблице, я предположил бы, что Вы использовали тип таблицы InnoDB в MySQL. У меня есть некоторые таблицы с более чем 100 миллионами использований записей, MyISAM под MySQL и количеством (*) очень быстр.
Относительно MySQL, в частности, существуют даже небольшие различия в индексации между таблицами InnoDB и MyISAM, которые являются двумя обычно используемыми типами таблицы. Стоит понять за и против каждого и как использовать их.
В каком доступе к данным Вы нуждаетесь? Я использовал HBase (на основе BigTable Google) загруженный огромным объемом данных (~30 миллионов строк) как бэкенд для приложения, которое могло возвратить результаты за несколько секунд. Однако не действительно уместно при необходимости в "оперативном" доступе - т.е. приводить в действие веб-сайт. Его ориентированный на столбец характер является также довольно радикальным изменением, если Вы привыкли к ориентированному на строку DBMS.
Количество (*) на целой таблице на самом деле что-то, что Вы делаете много?
InnoDB должен будет сделать полное сканирование таблицы для подсчета строк, который является, очевидно, главной проблемой производительности, если подсчет всех их является чем-то, что Вы на самом деле хотите сделать. Но это не означает, что другие операции на таблице будут медленными.
С правильными индексами, MySQL будет очень быстр при получении данных из таблиц, намного больше, чем это. Проблема с индексами состоит в том, что они могут причинить боль, вставляют скорости, особенно для больших таблиц, как вставляют отбрасывания производительности существенно, как только пространство, требуемое для индекса, достигает определенного порога - по-видимому, размер, это сохранит в памяти. Но если Вам только нужны скромные скорости вставки, MySQL должен сделать все, в чем Вы нуждаетесь.
Любая другая база данных будет иметь подобные компромиссы между, получают скорость и вставляют скорость; они могут или не могут быть лучше для Вашего приложения. Но я сначала посмотрел бы на разбирание в индексах и возможно перезапись Ваших запросов перед попыткой других баз данных. Если это имеет значение мы выбрали MySQL первоначально, потому что мы нашли, что он работал лучше всего.
Примечание, что таблицы MyISAM в MySQL хранят общий размер таблицы. Они поддерживают это, потому что это полезно для оптимизатора в некоторых случаях, но побочный эффект состоит в том, что количество (*) на целой таблице действительно быстро. Это не обязательно означает, что они быстрее, чем InnoDB в чем-либо еще.
Вы просите книжную ценность ответа , и я поэтому предлагаю, чтобы Вы получили хорошую книгу по базам данных. Существуют многие .
Для запущения Вас вот некоторые основы базы данных:
Первый, Вам нужна большая модель данных, базирующаяся не только на том, какие данные необходимо хранить, но и на шаблонах использования. Хорошая производительность базы данных запускается с хорошего дизайна схемы.
115-секундный, поместите indicies в столбцы, основанные на ожидаемом поиске, И обновите потребности, поскольку выполнение обновления часто пропускается.
В-третьих, не вставляйте функции где пункты если вообще возможный.
Четвертый, используйте - гм механизм RDBMS, который имеет качественный дизайн. Я почтительно утверждал бы, что, в то время как это улучшилось значительно в недалеком прошлом, mysql не квалифицирует. (Извинения тем, кто хочет обсудить это, наконец имели успех недавно.) Больше нет никакой потребности выбрать между высокой ценой и качеством; пост-ГРЭС (иначе PostgreSql) является доступным открытым исходным кодом и является действительно фантастической - и имеет все плагины в наличии для удовлетворения потребностей.
Наконец, изучите то, что Вы просите, чтобы механизм базы данных сделал - усиление приблизительно понимание внутренностей - таким образом, можно лучше судить, какие виды вещей являются дорогими и почему.
Я ответил на подобный вопрос в Этот Stackoverflow Регистрация в некоторых деталях, описав достоинства архитектуры обеих систем. В некоторой степени это было сделано с точки зрения организации хранилищ данных, но многие различия также имеют значение в системах обработки транзакций.
Однако 25 миллионов строк не являются VLDB и если у Вас есть проблемы производительности, необходимо обратиться к индексации и настройке. Вы не должны переходить к Oracle для поддержки 25 миллионов баз данных строки - у Вас есть приблизительно 3 порядка величины пойти, прежде чем Вы будете действительно на территории VLDB.
Я иду во второй @Mark Baker и говорю, что необходимо создать индексы на таблицах.
Для других запросов, чем тот Вы выбрали, необходимо также знать, что использование конструкций такой как В () быстрее, чем серия ИЛИ операторы в запросе. Существует много небольших шагов, которые можно сделать к отдельным запросам ускорения.
Индексация является ключевой для производительности с этим количеством записей, но как Вы пишете, что запросы могут иметь большое значение также. Настраивающие методы реального исполнения варьируются базой данных, но в целом, стараются не возвращать больше записей или полей, чем Вам на самом деле нужно, удостоверьтесь, что все объединяющие поля индексируются (а также распространенный, где поля пункта), избегайте курсоров (хотя я думаю, что это менее верно в Oracle, чем SQL Server, который я не знаю о MySQL).
Аппаратные средства могут также быть узким местом особенно при выполнении вещей помимо сервера базы данных на той же машине.
настройка Производительности является очень техническим предметом и не может действительно быть отвечена хорошо в формате как это. Я предлагаю, чтобы Вы получили настраивающую книгу производительности и считали ее. Вот является ссылка на одну для MySQL http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/0596101716