Я хочу сравнить в предложении where оператора select две переменные, набранные char. Переменная таблицы базы данных имеет длину 40, а сравнительная переменная 32. Можно ли сравнивать только первые 32 символа переменной базы данных в условии where? Когда да, как я могу это сделать? И когда, если это невозможно, каковы мои альтернативы? В базе данных более 300000 записей, поэтому я не могу зациклить их все во внутренней таблице.
Откройте SQL WHERE Условие между символами разной длины
Ответы (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"