使用查询确定索引
Deciding on the indexes using the query
我有一个名为 "Repayment" 的 table,它以 borrower_id 作为主键。我需要决定需要在此 table 上创建的索引。我有以下查询,我已经想出了索引。我需要知道这些索引是否正确,或者是否有更好的方法。
SELECT DISTINCT name, address
FROM Repayment
WHERE borrower_id = 4;
create index idxrep on repayment(borrower_id) include(name,address);
SELECT *
FROM Repayment
WHERE borrower_id = ? AND repayment_date > '11-12-2014';
create idxborrrep on repayment(borrower_id,repayment_date);
SELECT borrower_id, loanamount
FROM Repayment
WHERE loanamount BETWEEN ? AND ?;
create indxloanamount on repayment(loanamount) include(borrower_id,loanamount);
您的索引看起来很适合您的查询。您可以将三个索引减少为两个主要覆盖的索引:
create idxborrrep on repayment(borrower_id, repayment_date) include (name, address);
create indxloanamount on repayment(loanamount) include(borrower_id,loanamount);
我质疑在索引中包含 name
和 address
列。这些可能相当大,因此在数据页中查找它们的开销可能小于索引大小的增加。但是,无论哪种方式,这很可能是一个非常小的问题。
我有一个名为 "Repayment" 的 table,它以 borrower_id 作为主键。我需要决定需要在此 table 上创建的索引。我有以下查询,我已经想出了索引。我需要知道这些索引是否正确,或者是否有更好的方法。
SELECT DISTINCT name, address
FROM Repayment
WHERE borrower_id = 4;
create index idxrep on repayment(borrower_id) include(name,address);
SELECT *
FROM Repayment
WHERE borrower_id = ? AND repayment_date > '11-12-2014';
create idxborrrep on repayment(borrower_id,repayment_date);
SELECT borrower_id, loanamount
FROM Repayment
WHERE loanamount BETWEEN ? AND ?;
create indxloanamount on repayment(loanamount) include(borrower_id,loanamount);
您的索引看起来很适合您的查询。您可以将三个索引减少为两个主要覆盖的索引:
create idxborrrep on repayment(borrower_id, repayment_date) include (name, address);
create indxloanamount on repayment(loanamount) include(borrower_id,loanamount);
我质疑在索引中包含 name
和 address
列。这些可能相当大,因此在数据页中查找它们的开销可能小于索引大小的增加。但是,无论哪种方式,这很可能是一个非常小的问题。