I have a table with a big amount of data.In my application I need to fetch data from this table entered between two dates (let's say 1 month).

There are three ways of doing this:1. SELECT info FROM table WHERE tabledatetime >= myStartdate AND tabledatetime <= myEnddate2. SELECT info FROM table WHERE tabledatetime BETWEEN myStartdate AND myEnddate3. SELECT info FROM table WHERE year(tabledatetime)=myYear AND month(tabledatetime)=myMonth

1 is the slowest, that's not hard.

But what about the other 2, which one will give me the best performance.

Try a covering index on the date column and the info column your are looking for. In other words a non cluster non unique index on the two columns and switch displaying of the querying plan on when executing your query. Alternatively a partitioned view/table can help.

Actually, 3 is the slowest once you have indexes on the table. Since you are using a function against your table column, SQL cannot use an index and it must resolve the function on every row in your table.I would expect 1 and 2 to generate the same execution plan and perform exactly the same, but the confirm you need to examine the execution plans.