(1/3) означает целочисленное деление, поэтому вы не можете получить десятичное значение из этого деления. Для решения этой проблемы используйте:
public static void main(String[] args) {
double g = 1.0 / 3;
System.out.printf("%.2f", g);
}
Вы получаете больше, чем это на самом деле в зависимости от того, что Вы делаете. Проверьте это объясняет страницу плана . Я принимаю немного здесь, что Вы используете Oracle и знаете, как запустить скрипт для отображения вывода плана. То, что может быть более важным для запуска с, смотрит на левую сторону для использования конкретного индекса или не и как тот индекс используется. Необходимо видеть вещи как" (Полный)", "(Индексом Rowid)", и т.д. при выполнении соединений. Стоимость была бы следующей вещью посмотреть на с более низкими ценами, являющимися лучше, и Вы заметите что при выполнении соединения, которое не использует индекс, можно получить очень большую стоимость. Можно также хотеть читать, детали об эти объясняют столбцы .
планаЭто - крупная область знаний (иначе черная магия).
подход я обычно взятие:
необходимо понять O () влияние различных индексов в контексте того, что Вы спрашиваете базу данных. Это помогает Вам понять структуры данных как B-деревья, хеш-таблицы и т.д. Затем создать индекс, который мог бы работать и повторить процесс.
, Если Oracle решает не использовать Ваш индекс, подайте заявку, ИНДЕКС () подсказывают и смотрят на новый план. Стоимость будет больше, чем план, который она действительно выбирала - это - то, почему она не выбрала Ваш индекс. План, которому подсказывают, мог бы привести к некоторому пониманию о том, почему Ваш индекс не хорош.
Вы получили нечеткий конец леденца на палочке.
нет абсолютно никакого пути, в изоляции, без тонны дополнительной информации и опыта, чтобы посмотреть на объяснить план и определить то, что (если что-нибудь) вызывает меньше, чем оптимальная производительность. Если бы оптимизация запросов могла бы быть уменьшена до 10 процессов шага, она была бы сделана автоматизированным процессом. Я собирался перечислить все вещи, которые необходимо понять, чтобы быть эффективными в этом, но это было бы очень длинным списком.
единственный короткий ответ, о котором я могу думать..., ищут шаги в плане, которые проходят путь больше байтов, чем Вы предположили бы. Затем думайте о том, как можно сократить то количество... через индекс или разделение.
Серьезно, доберитесь, книга Lewis Jonathan об основанной на стоимости Oracle Fundementals
Получают книгу Tom Kyte по Архитектуре базы данных Oracle и арендуют каюту в лесах в течение нескольких недель.
Я также предполагаю, что Вы используете Oracle. И я также рекомендую проверить объяснить веб-страницу плана для начинающих. Существует много к оптимизации, но она может быть изучена.
Несколько подсказок следуют:
Первый, когда кто-то определяет задачу для Вас для оптимизации, они почти всегда ищут приемлемую производительность, а не окончательную производительность. Если можно уменьшить время выполнения запроса с 3 минут вниз к 3 секундам, не потейте, уменьшая его вниз до 2 секунд, пока Вас не просят.
115-секундный, сделайте быструю проверку для проверки запросов, которые Вы оптимизируете, логически корректны. Это звучит абсурдным, но я не могу сказать Вам количество раз, меня попросили совета относительно медленного рабочего запроса, только чтобы узнать, что это иногда давало неправильные ответы! И как оказалось, отладка запроса часто, оказывалось, ускоряла его также.
, В частности, ищите фразу "Декартово Соединение" в объяснить плане. Если Вы видите его там, возможности ужасно хороши, что Вы нашли неумышленное декартово соединение. Обычный шаблон для неумышленного декартова соединения - то, что ИЗ пункта перечисляет таблицы, разделенные запятой, и условия объединения находятся в операторе Where. За исключением того, что одно из условий объединения отсутствует, так, чтобы Oracle не имела никакого выбора, кроме как выполнить декартово соединение. С большими таблицами это - авария производительности.
возможно видеть Декартово Соединение в объяснить плане, где запрос логически корректен, но я связываю это с более старыми версиями Oracle.
Также ищут неиспользованный составной индекс. Если первый столбец составного индекса не используется в запросе, Oracle может использовать индекс неэффективно, или нисколько. Позвольте мне дать пример:
запрос был:
select * from customers
where
State = @State
and ZipCode = @ZipCode
(DBMS не была Oracle, таким образом, синтаксис отличался, и я забыл исходный синтаксис).
А быстрый быстрый взгляд на индексы показал индекс на Клиентах со столбцами (Страна, состояние, ZipCode) в том порядке. Я изменил запрос для чтения
select * from customers
where Country = @Country
and State = @State
and ZipCode = @ZipCode
, и теперь он работал приблизительно через 6 секунд вместо приблизительно 6 минут, потому что оптимизатор смог использовать индекс для хорошего преимущества. Я спросил прикладных программистов, почему они опустили страну от критериев, и это было их ответом: они знали, что все адреса имели страну, равную 'США', таким образом, они полагали, что могли ускорить запрос путем пропуска того критерия!
, К сожалению, оптимизируя извлечение базы данных не действительно то же как сбривающие микросекунды вычислительного времени. Это включает понимание проектирования баз данных, особенно индексы и по крайней мере обзор того, как оптимизатор делает свое задание.
Вы обычно получаете лучшие результаты оптимизатора, когда Вы учитесь сотрудничать с ним вместо того, чтобы пытаться перехитрить его.
Удача, подходящая к скорости при оптимизации!