2008-11-04 23 views
6

Ben gibi benim veritabanı üzerinde bir sorgu var:Performans sorguda yalnızca bir sütun kullanılarak

SELECT * FROM expenses WHERE user_id = ? AND dated_on = ? 

ben hem user_id ve dated_on sütunları tabloya bir dizin ekledik . Ben SHOW INDEXES FROM expenses kullanarak dizinleri incelemek, iki satır vardır - 1'lik bir seq_in_index değeri ile bir, 2.

bir seq_in_index değeri ile diğer Sonra sadece birini kullanan bir sorgu göndermek eğer Benim sorum, iki WHERE maddeler, örneğin:

SELECT * FROM expenses WHERE user_id = ? 

başka bir dizin sadece olan endeksler user_id kolon oluşturmak için bir yararı var mı ya da yukarıda tarif edilen user_id/dated_on göstergesi verimli şekilde kullanılacak?

Son olarak, nasıl sorgu kullanırsanız hakkında:

SELECT * FROM expenses WHERE dated_on = ? 

Nasıl 2 seq_in_index değeri bu durumda endeks kullanımı ve performansını nasıl etkiliyor?

cevap

8

Örneğinizde SELECT * FROM expenses WHERE user_id = ? dizini kullanacak, ancak SELECT * FROM expenses WHERE dated_on = ? kullanamazsınız. Aslında ilgilendiğim

5

user_id ve dated_on dizininiz gerçekten bu sıradaysa (önce user_id), o zaman bir user_id sorgusu için de kullanılır. Sorgu için gerçek stratejiyi görmek için EXPLAIN kullanarak kontrol edebilirsiniz. MySQL, any left portion of an index numaralı telefonu kullanabilir.

+1

A nasıl seq_in_index değer değişiklikleri bilmek, 3 sütun indeksi A için

, B, C, WHERE A = ? AND B = ? A ve B üzerinde bir indeks kullanacak, ancak WHERE A = ? AND C = ? sadece üzerinde bir dizin kullanır sorgu performansı, bu yüzden soruyu buna göre düzenledim – Olly

İlgili konular