2016-04-01 34 views
0

Tabloda 10000 kayıt bulunan INDEXED_MERCHANT tablosunu güncelleştirmek için aşağıdaki SQL sorgusunu denedim. Güncelleme sorgu performansını iyileştirmek için hem "Ad" hem de "A" olarak Dizinlenmiş anahtarlar olarak dizine ekledim.MySQL güncelleştirme sorgusu dizin oluşturulmamış sütunları kullanma

INDEXED_MERCHANT | CREATE TABLE `INDEXED_MERCHANT` (
    `ID` varchar(50) NOT NULL, 
    `NAME` varchar(200) DEFAULT NULL, 
    `ONLINE_STATUS` varchar(10) NOT NULL, 
    `A` varchar(100) DEFAULT NULL, 
    `B` varchar(200) DEFAULT NULL, 
    PRIMARY KEY (`ID`), 
    KEY `NAME` (`NAME`,`A`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 

İşte bunun anlamı hem benim tuşları endeksli tuşları olarak kabul edilmektedir: aşağıdaki gibi komutu SHOW CREATE TABLE INDEXED_MERCHANT; yürüterek derken bir çıkış sonucunu alırsınız. Aşağıdaki komutu çalıştırdığımda, "Ekstra" sütun sonucu, sorgunun dizin anahtarlarını kullanmadığını söylüyor. Amacıma nasıl ulaşmalıyım? Gerçekleştirilen sorgusu: EXPLAIN EXTENDED UPDATE INDEXED_MERCHANT SET ONLINE_STATUS = '0' WHERE NAME = 'A 205' AND A = 'P 205'; Sonuç:

+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+ 
| id | select_type | table   | type | possible_keys | key | key_len | ref   | rows | filtered | **Extra**  | 
+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+ 
| 1 | SIMPLE  | INDEXED_MERCHANT | range | NAME   | NAME | 906  | const,const | 1 | 100.00 | **Using where** | 
+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+ 
+0

Bu sorgu için en iyi dizininiz var; problem/soru nedir? Bu kompozit endeksi kullanarak ('NAME' adlı isimle karıştırılmamalıdır, 'NAME'). '906' ve' const, const', her iki sütunun da içerildiğini belirtir. '1 satır 'da çok iyi. –

cevap

1

Sorgunuzda çıkış sütunu "key" açıklamak gibi belirgin "NAME" endeksi vuruyor. İşte

anahtar sütun MySQL aslında kullanmaya karar o anahtarı (indeks) gösterir mysql documentation

anahtar

den key ve extra sütun açıklama. MySQL, olası satırları aramak için olası_triler dizinlerinden birini kullanmaya karar verirse, bu dizin anahtar değer olarak listelenir. Kullanılması

nerede

fıkra sonraki tabloya karşı maç veya müşteriye göndermek için hangi satırların kısıtlamak için kullanılan bir. Özellikle tüm satırları tablodan getirmeyi veya incelemeyi istemediğiniz sürece, Ekstra Değerin Kullanılmadığı ve tablonun birleştirme türünün TÜMÜ veya dizin olması durumunda, sorgunuzda yanlış bir şey olabilir. Bir WHERE yan tümcesinin tüm bölümleri için bir dizin kullanıyor olsanız bile, sütunun NULL olması durumunda Kullanılıyor öğesini görebilirsiniz.