2016-04-30 97 views
2

我希望你們中的任何一位能夠提供任何幫助,如果我有一個擁有數百萬條目的龐大數據庫,並且我需要的是與特定年份有關的信息(比如說2015),如果我使用以下查詢,性能明智的將這個是最好的做法或有另一種方式有一個更好的查詢,從性能角度來看,以下SQL是好還是壞的做法?

CREATE INDEX table1_idx ON table1 (date_column); 
SELECT text, date_column 
FROM table1 
WHERE datepart(yyyy, date_column) = 2015; 

與任何幫助,這將不勝感激。

+0

請檢查該鏈接http://stackoverflow.com/questions/3049283/mysql-indexes-what-are-the-best-practices。這可能會回答你的問題 –

回答

0

如果這是關於SQL Server,那不是這樣做的方法。在字段上使用任何函數都會導致非SARGable。

務必使用正確的搜索標準是這樣的:

SELECT text, date_column 
FROM table1 
WHERE date_column >= '20150101' and date_column < '20160101' 

您可能還需要考慮增加text爲包括列,以防止鍵查詢:

CREATE INDEX table1_idx ON table1 (date_column) include (text) 
0

MySQL不能使用索引範圍掃描操作,這是由於函數纏繞在列上。該功能必須在表格中每行對進行評估。

要獲得索引範圍掃描操作,請在裸露的列上進行比較。

例如:

SELECT t.text 
     , t.date_column 
    FROM table1 t 
    WHERE t.date_column >= '2015-01-01' 
    AND t.date_column < '2015-01-01' + INTERVAL 1 YEAR 
相關問題