Откройте SQL WHERE Условие между символами разной длины

Я хочу сравнить в предложении where оператора select две переменные, набранные char. Переменная таблицы базы данных имеет длину 40, а сравнительная переменная 32. Можно ли сравнивать только первые 32 символа переменной базы данных в условии where? Когда да, как я могу это сделать? И когда, если это невозможно, каковы мои альтернативы? В базе данных более 300000 записей, поэтому я не могу зациклить их все во внутренней таблице.


person LittleProgrammer    schedule 04.12.2015    source источник


Ответы (1)


Добро пожаловать, маленький программист. Сначала я хотел бы сказать и указать на них (если Вам это не интересно, прокрутите вниз до моего рекомендованного ответа):

В базе данных более 300 000 записей. Вы, конечно, имеете в виду datatable, из которого хотите выбирать, верно? 300 000 записей для всей базы данных - пустяки.

Я предполагаю 300 000 записей в таблице. Вы не можете зациклить? Что вы можете. Эти времена прошли, чувак, 300 000 - это сегодня постоянно растущий стандарт. Знаете ли вы, почему появились облака, большие данные, хана, хранилища данных в памяти и т. Д.?

Но в этом случае (и я понимаю, что это не очень хорошо, перебирать больше данных, тогда это необходимо) есть некоторые шаги, чтобы уменьшить данные после полного сканирования таблицы. Давайте сначала разберемся с этим словом.

1. ИЗБЕГАЙТЕ ПОЛНОГО СКАНИРОВАНИЯ ТАБЛИЦ. ПО ВОЗМОЖНОСТИ.

Вы всегда должны искать, чтобы получить какие-то параметры, чтобы правильно определить Ваши условия. В основном есть некоторые значения, которые можно использовать в качестве условий. Также проверьте существующие индексы на удобство использования.

2. НЕ ВЫБИРАЙТЕ ВЫБОР * из в соответствующий.

Иногда два выбора могут быть лучше, чем один большой, и особенно тогда, когда объем данных становится больше. В этом случае полезно создать тип для внутренней таблицы, которая будет содержать ТОЛЬКО ключи записей, которые выбираются НЕ ключами / внешними ключами. Кроме того, вы можете добавить параметры where-clause-params в качестве полей или, в вашем случае, эти символьные поля (в общих полях, над которыми мы будем работать, чтобы сузить результаты). А затем выберите ТОЛЬКО эти желаемые поля во внутренней таблице.

3. ИСПОЛЬЗУЙТЕ ВСЕ DB-функции, которые можно использовать

Это передает всю работу, которую может выполнять РСУБД, вместо того, чтобы впоследствии ее нужно было запускать на AS. Агрегирование, без дубликатов, сумм и т. Д.

4. Вы знаете свою базу данных? Тогда воспользуйтесь подсказками

Как и в пункте 4, выполнение передается в rdbms, соответственно. компьютер с базой данных, на котором запущены оптимизированные rdbms, которые могли бы работать лучше. Это следует использовать с особой осторожностью.

5. Вы знаете размер результата? Выберите правильную внутреннюю таблицу

Объединяются три вещи: тип внутренней таблицы, количество результатов, доступные значения, которые будут использоваться в качестве условий для «read-table / loop at».

  • Хешированные таблицы? Самый быстрый. Они потребляют много памяти. Специально для больших конструкций. Но Вы можете определить, как Вы хотите их создавать. Небольшая структурированная внутренняя таблица с большим количеством записей может быть быстрее и потреблять меньше памяти, чем большая структура с меньшим количеством записей. Это должно быть проверено с помощью трассировки до принятия решения в периоды пикового трафика.

  • Сортированные таблицы? Лучше всего, если у вас будет числовой ключ и небольшая структура. В большинстве случаев это самая быстрая комбинация после хеширования.

  • Стандартные столы? Теперь вы интерпретируете это сами.

  • Ключи? При необходимости объедините, но попробуйте использовать один первичный ключ.

Это несколько важных советов с точки зрения производительности.

Однажды вы оказались в ситуации, когда у вас есть ваш (возможно, слишком большой результат), особенно в вашем случае, вы можете удалить внутреннюю таблицу, в которой строка не содержит шаблон предложения where. Это макрос, для аналогичной вещи подойдет цикл, но я думаю, он быстрее. "CP" - шаблон "содержит", "NP" - шаблон "не содержит". Это может уменьшить результаты.

Ответ - это список альтернатив? Нет!

Почему я пишу это и публикую как ответ? В случае, если ответа нет, это, по крайней мере, ближайшая точка для использования в качестве альтернативы.

В нашей SAP-среде есть такой ответ:

http://scn.sap.com/thread/1786222

ЗАКЛЮЧЕНИЕ:

Создайте таблицу диапазонов, используйте «CP» в качестве опции и «I» в качестве знака. Передайте значение where-condition-value в low. Выполните выбор с помощью where "in blabla"

person icbytes    schedule 04.12.2015
comment
Я думал, что вы снисходительны, когда назвали его Маленьким Программистом. Возможно, вы еще были, но, по крайней мере, он дал вам лицензию :-) - person Esti; 21.12.2015
comment
Да, в конце концов я заметил :-) - person Esti; 11.01.2016