Подобные публикации так и побуждают понудеть...
Цитата:
Сообщение от
Blog bot
X++:
while select custTable
where (!dialogField.value() || custTable.InvoiceAccount != '')
В игрушечных базах оно, может, и без разницы, но в реальной жизни было замечено, что оптимизатор запросов СУБД совершенно по-разному реагирует на условия вида custTable.InvoiceAccount != '' и custTable.InvoiceAccount > '' - по смыслу они вроде как идентичны, но оптимизатору запросов так почему-то не кажется. К слову, и само ядро, если в запросе указать просто custTable.InvoiceAccount (неявно приводя InvoiceAccount к булевскому типу), формирует запрос с условием > '', а не != ''.
Цитата:
Сообщение от
Blog bot
X++:
while select SalesTable
notexists join EmplTable
where EmplTable.EmplId == SalesTable.SalesTaker &&
EmplTable.status != HRMEmplStatus::Resigned
Вот это просто вошлебный пример! Фильтрация по неиндексированному полю SalesTable, да еще и с notexists join - вернейший способ получить полное сканирование таблицы с подзапросами к подчиненной таблице на каждую запись в SalesTable.
Цитата:
Сообщение от
Blog bot
General structure looks as follows: notexists join where && (condition != required value)
Скорее general structure looks as follows: не используйте notexists join на сколь-нибудь больших выборках - зачастую тупо перебрать записи, или закэшировать данные из подчиненной таблицы, или использовать какой-нить RecordSortedList для избавления от дублирующихся по определенным критерями записей оказывается с точки зрения производительности намного предпочтительнее. Вот уж действительно:
Цитата:
Сообщение от
Wamr
и главный pattern - не используйте эти patterns
используйте Query & QueryRun