Необходимо использовать строковые маркировки по умолчанию.
Профессионалы:
Недостатки:
, Который Вы предпочли бы?
ints?
интервал i = 1;
customerId = resultSet.getInt (я ++);
customerName = resultSet.getString (я ++);
customerAddress = resultSet.getString (я ++);
или Строки?
customerId = resultSet.getInt ("customer_id");
customerName = resultSet.getString ("customer_name");
customerAddress = resultSet.getString ("customer_address");
И что, если там новый столбец вставляется в положении 1? Какой код Вы предпочли бы? Или если бы порядок столбцов изменяется, какую версию кода необходимо было бы изменить вообще?
Вот почему необходимо использовать строковые маркировки по умолчанию.
Помимо взгляда в Карте для маркировок это также приводит к дополнительному Строковому созданию. Хотя это будет происходить на стеке, но тем не менее этом кариес стоимость с ним.
Все это зависит от отдельного выбора и до даты, я использовал только индексы:-)
Используя индекс попытка оптимизации.
время, сэкономленное этим, потрачено впустую дополнительным усилием, которое оно берет разработчика для поиска необходимых данных, чтобы проверить, будет ли их код работать правильно после изменений.
я думаю, что это - наш встроенный инстинкт для использования чисел вместо текста.
Я соглашаюсь с предыдущими ответами, что производительность не что-то, что может вынудить нас выбрать любой из подходов. Было бы хорошо рассмотреть следующие вещи вместо этого:
Драйвер JDBC заботится для столбца для индексации поиска. Таким образом, при извлечении значений именем столбца каждый раз, когда драйвер делает поиск (обычно в карте хеша) для проверки соответствующего индекса на имя столбца.
Я не думаю с помощью производительности влияния маркировок очень. Но существует другая причина не использовать String
с. Или int
с, в этом отношении.
Рассматривают использование констант. Используя int
постоянный делает код больше четко, но также и менее вероятно иметь ошибки.
Помимо того, чтобы быть более читаемым, константа также препятствует тому, чтобы Вы делали опечатку на имена маркировки - компилятор бросит ошибку, если Вы сделаете. И любой IDE, стоящий чего-либо, возьмет его. Дело обстоит не так, если Вы используете String
с или ints
.
Предупреждение: я собираюсь стать претенциозным здесь, потому что это сводит меня с ума.
99%* времени, это - смешная микрооптимизация, что у людей есть некоторое смутное представление, делает вещи 'лучше'. Это полностью игнорирует то, что, если Вы не находитесь в чрезвычайно трудном и занятом цикле более чем миллионы результатов SQL все время , который, надо надеяться, редок, Вы никогда не будете замечать его. Для всех, кто не делает, это, стоимость времени разработчика maintaing, обновления и исправления ошибок в индексации столбца намного больше, чем возрастающая стоимость аппаратных средств для Вашего infinitesimally-worse-performing приложения.
не Делают оптимизации кода как это в. Код для человека, поддерживающего его. Тогда наблюдайте, измерьте, проанализируйте и оптимизируйте. Наблюдайте снова, имейте размеры снова, проанализируйте снова и оптимизируйте снова.
Оптимизация является в значительной степени последним шагом в разработке, не первым.
* иллюстрация составлена.
Я сделал некоторое профилирование производительности на этом точном предмете на базе данных Oracle. В нашем коде у нас есть ResultSet с многочисленным colums и огромным количеством строк. Из этих 20 секунд (!) запрос берет для выполнения метода oracle.jdbc.driver. ScrollableResultSet.findColumn (Имя строки) занимает приблизительно 4 секунды.
, Очевидно, существует что-то не так с общим замыслом, но использующие индексы вместо имен столбцов, вероятно, взяли бы это на расстоянии в 4 секунды.
Ответ принят, тем не менее, вот некоторая дополнительная информация и личный опыт, которые я еще не видел.
По возможности используйте имена столбцов (предпочтительно, константы, а не литералы). Это и понятнее, и проще в обслуживании, и при будущих изменениях меньше шансов сломать код.
Однако индексы столбцов можно использовать. В некоторых случаях они работают быстрее, но не настолько, чтобы перекрывать указанные выше причины для имен *. Это очень ценно при разработке инструментов и общих методов, работающих с ResultSet
s. Наконец, может потребоваться индекс, потому что у столбца нет имени (например, безымянного агрегата) или есть повторяющиеся имена, поэтому нет простого способа сослаться на оба.
* Обратите внимание, что я написал несколько драйверов JDBC и заглянул внутрь некоторых из открытых источников, и внутри они используют индексы столбцов для ссылки на столбцы результатов. Во всех случаях, с которыми я работал, внутренний драйвер сначала сопоставляет имя столбца с индексом. Таким образом, вы можете легко увидеть, что имя столбца во всех этих случаях всегда занимало больше времени. Однако это может быть не для всех драйверов.
Конечно, использование названий колонок повышает читабельность и облегчает обслуживание. Но использование названий колонок имеет обратную сторону. Как вы знаете, SQL позволяет использовать несколько имен колонок с одним и тем же именем, нет никакой гарантии, что имя колонки, введенное вами в методе getter resultSet, на самом деле указывает на имя колонки, к которой вы собираетесь получить доступ. Теоретически, использование индексных номеров вместо названий колонок предлагается, но это снижает удобочитаемость...
Спасибо