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** |
+----+-------------+------------------+-------+---------------+------+---------+-------------+------+----------+-------------+
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. –