Я пошел бы с clearfsimport сценарием, лучше оборудованным для импорта многократно того же набора файлов, и автоматически:
Поэтому, если Ваше 'предоставление zip-файла должно быть обновлено на регулярно, основанием, clearfsimport является способ пойти, но со следующими опциями:
clearfsimport -preview -rec -nset c:\sourceDir\* m:\MyView\MyVob\MyDestinationDirectory
Примечание:
От CMWiki, об этом 'nset' опция:
По умолчанию, clearfsimport предназначен, чтобы использоваться vob владельцем или привилегированным пользователем, но пользователи часто пропускают-nsetevent опцию, с которой он может использоваться любым пользователем.
Эта опция управляет clearfsimport для не установки меток времени элементов к этому объекта исходного файла вне vob (который требует привилегированного доступа).
существует незначительный неочевидный побочный эффект с этим: как только версия будет создана со штампом текущего времени, даже vob владелец не будет в состоянии импортировать сверху ее версию с более старым (как это было бы), метка времени, без этой-nsetevent опции. Т.е. как только Вы используете эту опцию, обычного или привилегированного пользователя, Вы более или менее обязаны использовать ее в продолжении.
Оберните таблицу «B» оператором OR
, например:
AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )
Таким образом, если для строки нет значения, ее длина будет равна нулю, а первая часть ИЛИ
будет оцениваться, всегда возвращаться как истина и возвращать эту часть уравнения как действительную и игнорировать другую половину, используя предложение LIKE
.
Вы могли бы примените то же самое для любого количества связанных таблиц.
Во-первых, в вашем примере есть место:
AND TABLE_B.COLUMN_B LIKE '% %'
Это никогда не будет оптимизировано, так как это действительно важное условие.
Теперь я думаю, что если оно будет оптимизировано прочь зависит от движка базы данных и от того, насколько он умен.
Например, SQL Server 2005 предлагает один и тот же план выполнения для двух типов запросов, тогда как MySQL 5.0.38 - нет.
Вы можете переписать свой запрос следующим образом:
SELECT TABLE_A.* FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND (@paramA='' or TABLE_A.COLUMN_A LIKE '%' + @paramA + '%')
AND (@paramB='' or TABLE_B.COLUMN_B LIKE '%' + @paramB + '%')
Таким образом, если paramA или paramB равно '', то другой столбец, запрашиваемый в тех же скобках, не будет опрошен.
В MySQL вы также можете использовать ILIKE, и тогда он нечувствителен к регистру.
Используйте UNION и правильные JOIN.
Поисковый запрос% foo% достаточно плох (нельзя использовать индекс) без добавления OR и LEN к смеси.
SELECT
TABLE_A.*
FROM
TABLE_A
JOIN
TABLE_B On TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
WHERE
TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '%SEARCH2%'
UNION
SELECT
TABLE_A.*
FROM
TABLE_A
WHERE
TABLE_A.COLUMN_A LIKE '%SEARCH%'