Tablo, InnoDB tablosundadır. İşte size yardımcı olabilecek bazı bilgiler.MySQL sorgusu çok yavaş. Endekslenmiş sütuntaki (*) sayısı
EXPLAIN SELECT COUNT(*) AS y0_ FROM db.table this_ WHERE this_.id IS NOT NULL;
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
| 1 | SIMPLE | this_ | index | PRIMARY | PRIMARY | 8 | NULL | 4711235 | Using where; Using index |
+----+-------------+-------+-------+---------------+---------+---------+------+---------+--------------------------+
1 row in set (0.00 sec)
mysql> DESCRIBE db.table;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | bigint(20) | NO | PRI | NULL | |
| id2 | varchar(28) | YES | | NULL | |
| photo | longblob | YES | | NULL | |
| source | varchar(10) | YES | | NULL | |
| file_name | varchar(120) | YES | | NULL | |
| file_type | char(1) | YES | | NULL | |
| created_date | datetime | YES | | NULL | |
| updated_date | datetime | YES | | NULL | |
| createdby | varchar(50) | YES | | NULL | |
| updatedby | varchar(50) | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
10 rows in set (0.05 sec)
sorgu orada bana sonucunu verir açıklar. Ancak asıl sorgu oldukça uzun bir süredir çalışıyor. Bunu nasıl düzeltebilirim? Neyi yanlış yapıyorum?
Bu tabloda kaç tane photos
bulunduğunu anlamaya ihtiyacım var. Başlangıçta orijinal kodlayıcı, WHERE photo IS NOT NULL
'u (3 saat + aldı) kontrol eden bir sorguya sahipti, ancak bu anahtarı, birincil anahtar olduğu için id
sütununu kontrol etmek için değiştirdim. Orada büyük bir performans artışı bekledim ve bir saniyede bir cevap bekliyordum ama bu durum böyle değil.
Veritabanında ne tür bir optimizasyon yapmam gerekiyor? Sorgunun iyi olduğunu düşünüyorum ama yanılıyorsam beni düzeltmekten çekinmeyin.
Düzenleme: redhat-linux-gnu (x86_64) mysql Ver 14.14 Distrib 5.1.52, taleb 5,1
P.S. kullanarak: Ben gibi saçma sapan bir tablo adını. Aslında db adlı veritabanına ve söz konusu tabloya ait tabloya sahip değilim.
Nasıl 'gerçekleştirmek db.table' GELEN COUNT (*) SEÇ geliyor? ('Id' boş olmayan olduğundan, geçerli sorgula eşdeğerdir.) – ruakh
Hatalı. 10 dakikadan fazla sürüyor (emin olamadım ama ne kadar bekledim). – Sanchit