<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Key to Good Code]]></title><description><![CDATA[Key to Good Code]]></description><link>https://www.keytogoodcode.com/blog</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 04:52:30 GMT</lastBuildDate><atom:link href="https://www.keytogoodcode.com/blog-feed.xml" rel="self" type="application/rss+xml"/><item><title><![CDATA[Another edge case of an overflowing record in a SQL table]]></title><description><![CDATA[As a follow-up to my previous post , I'd like to linger a little longer on the topic of wide rows and the effects of row overflow in SQL Server, and specifically on the storage impact that we can observe in Business Central SaaS tenants when too many rows spill into the row overflow storage unit. Sample data and the first test The tests below that I'm going to run will be built around the following table with four text fields. table  50101  "Large Test Rec" { DataClassification  =...]]></description><link>https://www.keytogoodcode.com/post/another-edge-case-of-an-overflowing-record-in-a-sql-table</link><guid isPermaLink="false">695d5d27955bbdda690c42af</guid><category><![CDATA[SQL Server]]></category><pubDate>Fri, 09 Jan 2026 12:48:09 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/11062b_f3aa8c82478f447ab16e8712ec01b568~mv2.jpg/v1/fit/w_1000,h_1000,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[SQL Server record size: How many fields is too much?]]></title><description><![CDATA[The maximum size of a table row in SQL Server in limited to 8 KB, or to be more precise 8060 bytes, if we follow Microsoft online articles, such as Maximum Capacity Specifications for SQL Server - SQL Server | Microsoft Learn . This limit arises from the SQL Server data storage architecture: table rows are organized in 8-kilobyte pages, and a single row cannot exceed the size of the page, therefore 8KB is the maximum amount of storage space that can be allocated for a single row. Each page...]]></description><link>https://www.keytogoodcode.com/post/sql-server-record-size-how-many-fields-is-too-much</link><guid isPermaLink="false">693d2acc42832d49aebbc19c</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL]]></category><pubDate>Tue, 23 Dec 2025 15:52:05 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_51c6638dde3c4a8c9e6d0ace6014b3f2~mv2.png/v1/fit/w_641,h_309,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[On the efficiency of indexes on a skewed dataset]]></title><description><![CDATA[Recently, one particular piece of code in Business Central's codeunit 1501 Workflow Management  once again revived the old discussion about the benefits of calling IsEmpty  before actually retrieving the records with FindSet . Yes, that inexhaustible if not IsEmpty then FindSet . I already wrote about this a few times here  and here . But this time the combination of IsEmpty with FindSet appeared to be a good pretext to talk about index efficiency: when a seemingly good index does not achieve...]]></description><link>https://www.keytogoodcode.com/post/on-the-efficiency-of-indexes-on-a-skewed-dataset</link><guid isPermaLink="false">69346b7d04019cd6c2cc82f3</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL Performance]]></category><pubDate>Wed, 10 Dec 2025 05:45:14 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_1a7ab4fde5fe43c5829a666405be8437~mv2.png/v1/fit/w_703,h_320,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Performance benefits of SetLoadFields in a slow network]]></title><description><![CDATA[Introduction of the SetLoadFields  function in AL language that allowed to limit the number of fields returned to the Business Central...]]></description><link>https://www.keytogoodcode.com/post/performance-benefits-of-setloadfields-in-a-slow-network</link><guid isPermaLink="false">68b60ff3fcffb11462e283fe</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><pubDate>Wed, 03 Sep 2025 12:55:22 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_b14637eda640480e83cbe1e970fb1f1e~mv2.png/v1/fit/w_631,h_343,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[JIT loads vs Full record load]]></title><description><![CDATA[Since the time when I came across this post by Waldo  (or actually, he mentioned his test results in one online discussion) I was curious...]]></description><link>https://www.keytogoodcode.com/post/jit-loads-vs-full-record-load</link><guid isPermaLink="false">683b0ec5df1ea61c6e2895f6</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><pubDate>Sat, 31 May 2025 17:57:45 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/11062b_02e90b047a104c0b9e65bedac9f0835d~mv2.jpg/v1/fit/w_1000,h_1000,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[To sort, or not to sort, that is the question]]></title><description><![CDATA[Back in the old Navision days, when clients' data were stored in the Navision native database instead of Azure SQL Server, and functions...]]></description><link>https://www.keytogoodcode.com/post/to-sort-or-not-to-sort-that-is-the-question</link><guid isPermaLink="false">68386a681ab25c835899457f</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><pubDate>Fri, 30 May 2025 07:15:49 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_c7ed60641d704ed4bd0252debacd8ce9~mv2.png/v1/fit/w_814,h_430,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Garbage collection of event subscribers]]></title><description><![CDATA[I once wrote a post on event subscribers and the presumed performance benefits of single instance subscriber codeunits, but the topic keeps reappearing every now and then, and I feel it could be a good idea to add a few more arguments to the same old debate. Because why not run a few useless, but highly entertaining tests on a Saturday evening. One statement in defense of the single instance event subscribers is that the subscriber codeunit does not have to be disposed after the execution and...]]></description><link>https://www.keytogoodcode.com/post/garbage-collection-of-event-subscribers</link><guid isPermaLink="false">6776eb4541529e33e7d26046</guid><category><![CDATA[AL]]></category><pubDate>Sat, 12 Apr 2025 18:19:47 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_12f08ab144e44a819143d2196ad98827~mv2.png/v1/fit/w_1000,h_924,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Recursive AL]]></title><description><![CDATA[Recently I heard an opinion shared by some AL developers that recursion in AL can be dangerous and should be avoided because the AL...]]></description><link>https://www.keytogoodcode.com/post/recursive-al</link><guid isPermaLink="false">67f1076fb62b988f5597f81e</guid><category><![CDATA[AL]]></category><pubDate>Sat, 05 Apr 2025 20:24:58 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_2bc413f507fd4dd5b925efaf64dc61ff~mv2.png/v1/fit/w_769,h_245,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Buffered inserts and deadlocks]]></title><description><![CDATA[Recently I was debugging a very interesting deadlock case which I want to share in a blog post now. It was especially curious because, as...]]></description><link>https://www.keytogoodcode.com/post/buffered-inserts-and-deadlocks</link><guid isPermaLink="false">67b9c9dd2c47d3953d493535</guid><category><![CDATA[AL]]></category><category><![CDATA[SQL Server]]></category><pubDate>Sat, 22 Feb 2025 15:18:07 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_de5d91a5b6184d5f87b9b49e1f061b16~mv2.png/v1/fit/w_795,h_306,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Filtering on FlowFields]]></title><description><![CDATA[It has been said so many times that filtering on FlowFields is bad for performance that we are used to avoiding this kind of filters in...]]></description><link>https://www.keytogoodcode.com/post/filtering-on-flowfields</link><guid isPermaLink="false">67a051a6af5a9073dc0e2b70</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><pubDate>Thu, 06 Feb 2025 02:49:00 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_81d6e534548844258dfd396b1fd3a55a~mv2.png/v1/fit/w_1000,h_1000,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Table indexes and inserts]]></title><description><![CDATA[Following my series of posts where I have been addressing various aspects of table indexing, this post delves into the same old argument...]]></description><link>https://www.keytogoodcode.com/post/table-indexes-and-inserts</link><guid isPermaLink="false">67607c5b3d35fb9480422ec1</guid><category><![CDATA[AL]]></category><category><![CDATA[SQL Server]]></category><pubDate>Sat, 21 Dec 2024 18:55:12 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_886c777c8f4d4dcb8512ab8305b3460a~mv2.png/v1/fit/w_777,h_343,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Temporary tables in procedure parameters]]></title><description><![CDATA[When we declare multiple instances of a record variable referencing the same table in AL code, we essentially receive different instances...]]></description><link>https://www.keytogoodcode.com/post/temporary-tables-in-procedure-parameters</link><guid isPermaLink="false">67412371dadc256faa3db099</guid><category><![CDATA[AL]]></category><pubDate>Sun, 24 Nov 2024 10:37:29 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/11062b_933fc88ce03243148fe0d5952bcbaee7~mv2.jpeg/v1/fit/w_1000,h_1000,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Another alternative to SIFT: Columnstore indexes]]></title><description><![CDATA[According to this article on Microsoft Learn portal , non-clustered columnstore indexes (or NCCI) are seen as a possible replacement for...]]></description><link>https://www.keytogoodcode.com/post/another-alternative-to-sift-columnstore-indexes</link><guid isPermaLink="false">6729132f9bb21c3d15007ec1</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL Performance]]></category><pubDate>Sun, 10 Nov 2024 20:35:25 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_749749ca0918440aa35d28658972dc15~mv2.png/v1/fit/w_1000,h_676,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Hidden SQL queries in AL you (probably) want to avoid]]></title><description><![CDATA[Development of Business Central extensions is very much about the database communication, and as AL developers, we always control the...]]></description><link>https://www.keytogoodcode.com/post/hidden-sql-queries-in-al-you-probably-want-to-avoid</link><guid isPermaLink="false">671aaa43eadec1dcc1f8f8cc</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL]]></category><category><![CDATA[AL Performance]]></category><pubDate>Mon, 28 Oct 2024 08:00:34 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_cd8cc1852d1f475b9563bf12fded486f~mv2.png/v1/fit/w_969,h_655,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[if not IsEmpty then FindSet... again]]></title><description><![CDATA[Yes, I'm back again on this inexhaustible topic. The question of weather the call of IsEmpty before FindSet in AL can have a positive...]]></description><link>https://www.keytogoodcode.com/post/if-not-isempty-then-findset-again</link><guid isPermaLink="false">6716ca188119c302c0f9334f</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL]]></category><pubDate>Tue, 22 Oct 2024 14:43:15 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_72d852020dc64354a9df655626028348~mv2.png/v1/fit/w_825,h_456,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Covering indexes as an alternative to SIFT]]></title><description><![CDATA[In two of my previous blog posts I reviewed some pros and cons of the SumIndexField Technology (or SIFT) in Business Central. On the one...]]></description><link>https://www.keytogoodcode.com/post/covering-indexes-as-an-alternative-to-sift</link><guid isPermaLink="false">6712c29606882a2a132583da</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL]]></category><category><![CDATA[AL Performance]]></category><pubDate>Sun, 20 Oct 2024 14:23:50 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_9c2a692bc5024973bf03657d330d79db~mv2.png/v1/fit/w_967,h_541,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[if not IsEmpty then FindSet... Or not?]]></title><description><![CDATA[This post is a result of one very fruitful discussion with many knowledgeable Business Central enthusiasts in a long LinkedIn thread. Now...]]></description><link>https://www.keytogoodcode.com/post/if-not-isempty-then-findset-or-not</link><guid isPermaLink="false">66ca29b653a0913e01ad6932</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><pubDate>Sun, 25 Aug 2024 14:31:58 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_3e09a8dcde064301abc224c5034175b8~mv2.jpg/v1/fit/w_600,h_450,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[The dark side of SumIndexFields. Concurrency.]]></title><description><![CDATA[My previous post  was dedicated to an overview of Business Central's SumIndexField Technology, or simply SIFT, which helps us collect...]]></description><link>https://www.keytogoodcode.com/post/the-dark-side-of-sumindexfields-concurrency</link><guid isPermaLink="false">66b3ca7ba2bbffa3d0ba3b19</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><pubDate>Fri, 09 Aug 2024 09:43:47 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_a73c8f82d42f44db89215012c87aef0b~mv2.jpg/v1/fit/w_800,h_620,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[SIFT]]></title><description><![CDATA[SIFT, which stands for Sum Index Flow Technology, used to be a know-how in the Navision database, a data structure that stored...]]></description><link>https://www.keytogoodcode.com/post/_sift</link><guid isPermaLink="false">6689b7787565d32b6e9b8d3b</guid><category><![CDATA[AL Performance]]></category><category><![CDATA[SQL Server]]></category><category><![CDATA[AL]]></category><pubDate>Mon, 05 Aug 2024 21:21:42 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_60dcec9cd29d4262b45a34076c1811c3~mv2.jpg/v1/fit/w_900,h_525,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item><item><title><![CDATA[Navision legacy in AL: RecordLevelLocking]]></title><description><![CDATA[RecordLevelLocking function in AL is a heritage of the C/SIDE times and the Navision native database. In those old days when Navision...]]></description><link>https://www.keytogoodcode.com/post/navision-legacy-in-al-recordlevellocking</link><guid isPermaLink="false">66813757071590edae18f0a8</guid><category><![CDATA[SQL Server]]></category><category><![CDATA[AL]]></category><pubDate>Sun, 30 Jun 2024 13:54:03 GMT</pubDate><enclosure url="https://static.wixstatic.com/media/f7d516_20206d62c374471bb2d8a881f0753564~mv2.gif/v1/fit/w_637,h_519,al_c,q_80/file.png" length="0" type="image/png"/><dc:creator>adrogin</dc:creator></item></channel></rss>