Skip to content

The Dummy Programmer

Stories of daily programming

  • Home
  • My other dummy projects
  • Games
    • Space Y: An Asteroids clone
  • Services
    • What’s my user agent
    • What’s my IP address
  • About
  • Toggle search form

SQL Server and SARGables predicates

Posted on February 6, 2021February 7, 2021 By

Today I will share with you some suggestions about using SARGable predicates. First of all let’s start explaining what is a SARGable predicate…
SARGable stands for Search Argument able: in a nutshell a predicate is SARGable if Sql Server can use an index to improve the execution of the query.

Use the following operators to build SARGable predicates: =, >, >=, <, <=, IN, BETWEEN, and LIKE (only when used in the form ‘abc%’).

On the contrary the following operators are not SARGable: NOT, NOT IN, <>, and LIKE when used in the form ‘%abc%’.

But pay attention: you can make a predicate non SARGable even if you use a SARGable operator. This could happen, for example, in these cases:

  • when you use a function in the predicate of the query:
    WHERE ABS(Value) = 1
  • when you build a predicate where there is an implicit conversion, like integer to VARCHAR:
    WHERE Value = 200
    (in this case we assume that the column Value is of type VARCHAR)

    or VARCHAR to NVARCHAR:
    WHERE Value = ‘ABC’
    (in this case we assume that the column Value is of type NVARCHAR)

Here you can find some examples of non SARGable predicates that can be refactored to a SARGable one:

Don’t do thisDo this
Column – 1 = @ValueColumn = @Value + 1
ABS(Column) = 1Column BETWEEN -1 AND 1

Column >= -1 AND Column <= 1

Column IN (-1, 1)
CONVERT(DATE, Column) = @Value
(where Column is DateTime)
Column >= @Value AND Column < DATEADD(DAY, 1, @Value)
YEAR(Column) = @ValueColumn >= CONVERT(DATE, @Value + ‘0101’) AND Column <= CONVERT(DATE, @Value + ‘1231’)
LEFT(Column, 3) = ‘ABC’Column LIKE ‘ABC%’
Column = ‘ABC’ (column is of type NVARCHAR)Column = N’ABC’

So be careful when writing your predicates… you might run into a non SARGable one 🙂

Sql Server

Post navigation

Previous Post: Put an ASP.NET website under maintenance
Next Post: Getting SQL Server sample databases

Related Posts

Merge two or more historical tables with Sql Server T-SQL – Part 2 Sql Server
Merge two or more historical tables with Sql Server T-SQL – Part 1 Sql Server
Load a huge amount of data in a Sql Server table BCP
Sql Server error using a database with a CLR assembly CLR
Sql Server error: Cannot construct data type date, some of the arguments have values which are not valid. Sql Server
Sql Server error: A severe error occurred on the current command.  The results, if any, should be discarded. Sql Server

Search

Related posts

  • Merge two or more historical tables with Sql Server…
  • Merge two or more historical tables with Sql Server…
  • Get SQL Server version in T-SQL
  • Reset Sql Server cache

Categories

  • .NET 6 (1)
  • .NET 7 (1)
  • AJAX (1)
  • Android (2)
  • Apache (4)
  • ASP.NET (9)
  • ASP.NET MVC (3)
  • Avalonia UI (1)
  • BCP (1)
  • Bitlocker (2)
  • C# (14)
  • CentOS (4)
  • ClosedXML (1)
  • CLR (1)
  • DNS (1)
  • Encryption (3)
  • Excel (2)
  • FuelPHP (3)
  • Games (2)
  • Google Chrome (1)
  • GSuite (1)
  • HTML (1)
  • Imagick (2)
  • Javascript (1)
  • Kindle (1)
  • LAMP (3)
  • Linux (7)
  • MariaDB (2)
  • Mathematics (2)
  • MySql (4)
  • NPOI (1)
  • Office 365 (1)
  • Perl (1)
  • PHP (6)
  • Programming (1)
  • Remote desktop (1)
  • SFTP (2)
  • Sockets (3)
  • Sql Server (20)
  • Sql Server 2016 (14)
  • Sql Server 2019 (1)
  • SSL (4)
  • Task scheduler (1)
  • Telerik ASP.NET AJAX (2)
  • The Dummy Programmer Chat (2)
  • Threading (5)
  • Tools (1)
  • TPL (3)
  • TypeScript (3)
  • Ubuntu (4)
  • Virtualization software (3)
  • Visual Studio (1)
  • Visual Studio Code (2)
  • VueJS (1)
  • Web fonts (1)
  • Web programming (6)
  • Windows (12)
  • Windows 10 (15)
  • Windows Forms (1)
  • Windows Server (6)

Copyright © 2024 The Dummy Programmer | Privacy Policy | Terms of use |

Powered by PressBook Masonry Dark

Manage Cookie Consent
This site doesn’t collect user personal data and doesn’t install profiling or analytical cookies, either its own or from third parties. Read our privacy policy for more info.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}