KATIL MYSQL TARİH işlevi SOL delicesine yavaş çalışıyor

3 Cevap php

Satır eklerken:

LEFT JOIN core_records_sales as sales ON DATE(appointments.date) = DATE(sales.date_sold)

Benim sorgu için, 2-3 dakika, yaklaşık 8 saniye çalıştırmak için komut dosyası için zaman artırır.

Bu soruna neden olan bazı veriler var olacağını ya da ben doğru işlevi uygulamak değilim?

Onları aynı gün olması gerekiyor ama tarih alanları DATETIME çünkü ben) TARİHİ (kullanmanız gerekir

3 Cevap

Bu neredeyse kesin appointments.date alan endeksli varlık ile bir konudur. TARİH () fonksiyonunun kullanımını ekleyerek bunu bu indeks bir tablo taraması zorlayarak, kullanılamaz hale getirir.

Ben önce bu ile uğraşmak zorunda kalmıştım, ve ben sorunu çözmek için bulduğum en iyi yolu ona sadece tarih bölümü ile ayrı bir sütun (hiçbir zaman) var ya da iki ayrı sütunlarda tarih ve saati depolamak için .

Ben başkalarının o düşünceden ile ilgili daha iyi bir yol varsa duymak isteriz.

Eğer tarih sütun üzerinde bir dizin var mı? Bir dizin olmadan katılmadan tam bir tablo tarama gerektirir, böylece olası performans sorunu neden bulunuyor.

EXPLAIN sorgu iyileştirici sorgu planı ile ne kadar gelir görmek için aracılığıyla sorgusu çalıştırın.

Daha önceden sorgunun parçası olarak bir dizin kullanılarak ü ise her iki tablo üzerinde bir tam tablo taraması zorluyorlar çünkü muhtemelen. Sen planı incelemek (ve de biraz daha ayrıntı ile bize) ne olup bittiğini görmek için EXPLAIN aracılığıyla çalıştırmak gerekir.