• 29-01-2015, 20:20:20
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    aşağıdaki kodları kullanan ücretsiz bir script var elimde. listeleme çok yavaş oluyor bu kodlama yapısına uygun olarak hızlı ve değişik şekillerde nasıl kullanabilirim. fazla iyi sayılmam yardım eder örnek olarak verirseniz memnun olurum teşekkürler.

        public function get_last($limit)
        {
            return $this->db->select('h.*')
                            ->select('c.city_name, c.city_slug')
                            ->select('p.state_name, p.state_slug')
                            ->select('ca.title as category_title, ca.slug as category_slug, ca.image as category_image')
                            ->select('up.name as user_name, u.email as user_email')
                            ->select('COUNT(pr.company_id) as products')
                            ->from($this->_table . ' as h')
                            ->join($this->_table_state_cities . ' as c', 'h.city_id = c.city_id', 'left')
                            ->join($this->_table_state . ' as p', 'h.state_id = p.state_id', 'left')
                            ->join($this->_table_relations . ' as r', 'h.id = r.company_id', 'left')
                            ->join($this->_table_categories . ' as ca', 'ca.id = r.category_id', 'left')
                            ->join($this->_table_users . ' as u', 'h.user = u.id', 'left')
                            ->join($this->_table_user_profiles . ' as up', 'h.user = up.user_id', 'left')
                            ->join($this->_table_products . ' as pr', 'h.id = pr.company_id', 'left')
                            ->where('date <', date('Y-m-d H:i:s'))
                            ->where('h.status', 'published')
                            ->order_by('created_at', 'desc')
                            ->group_by('h.id')
                            ->limit($limit)
                            ->get()
                            ->result_array();
        }
  • 29-01-2015, 20:29:28
    #2
    Üyeliği durduruldu
    PHP:OOP, yani spagettiye göre daha performanslı bir yazış biçimidir. Scriptte tek tek mysql komutlarını girmektense tek fonksiyon içine yazmışlar bundan ötürü yavaşlıyor olabilir.

    Şimdi biriyle anlaşıp scriptteki mysql komutlarını manuel olarak hazırlamasını istemelisiniz. Böylece performans kazanabilirsiniz.

    .. Yada mysql cache yaparak kodu değiştirmeden performans kazanabilirsiniz. Forumda birisi konu açmıştı 6$'lık script satıyordu.
  • 29-01-2015, 20:37:51
    #3
    akrepx adlı üyeden alıntı: mesajı görüntüle
    aşağıdaki kodları kullanan ücretsiz bir script var elimde. listeleme çok yavaş oluyor bu kodlama yapısına uygun olarak hızlı ve değişik şekillerde nasıl kullanabilirim. fazla iyi sayılmam yardım eder örnek olarak verirseniz memnun olurum teşekkürler.

        public function get_last($limit)
        {
            return $this->db->select('h.*')
                            ->select('c.city_name, c.city_slug')
                            ->select('p.state_name, p.state_slug')
                            ->select('ca.title as category_title, ca.slug as category_slug, ca.image as category_image')
                            ->select('up.name as user_name, u.email as user_email')
                            ->select('COUNT(pr.company_id) as products')
                            ->from($this->_table . ' as h')
                            ->join($this->_table_state_cities . ' as c', 'h.city_id = c.city_id', 'left')
                            ->join($this->_table_state . ' as p', 'h.state_id = p.state_id', 'left')
                            ->join($this->_table_relations . ' as r', 'h.id = r.company_id', 'left')
                            ->join($this->_table_categories . ' as ca', 'ca.id = r.category_id', 'left')
                            ->join($this->_table_users . ' as u', 'h.user = u.id', 'left')
                            ->join($this->_table_user_profiles . ' as up', 'h.user = up.user_id', 'left')
                            ->join($this->_table_products . ' as pr', 'h.id = pr.company_id', 'left')
                            ->where('date <', date('Y-m-d H:i:s'))
                            ->where('h.status', 'published')
                            ->order_by('created_at', 'desc')
                            ->group_by('h.id')
                            ->limit($limit)
                            ->get()
                            ->result_array();
        }
    Verileriniz cok ise mysql indexleme ya da view olusturarak kullanacaginiz veriler ile hiz kazanirsiniz.

    Sent from my GT-I9200 using Tapatalk
  • 29-01-2015, 21:49:23
    #4
    yani bu kodların değişik kullanımı yok mu.
  • 29-01-2015, 21:51:50
    #5
    7 tane left join gördüm alt alta. fazlası da var mı bilmem ancak sorgunun kasması normal.

    mantığı değiştirmeniz gerek öncelikle. Misal cities için farklı bir fonksiyon yapabilirsiniz. static değişkende tutarsanız bir nevi cache gibi çalışacaktır.
    static $sehirler;
    if(isset($sehirler[$gelen]])) return $sehirler[$gelen];
    else {
    // select işlemleri
    }
    gibi. böylece sayfadaki tüm sorgularda ortak cities çalışacağından bir left joinden kurtulmuş olursun. Benzer şekillerde bu birleştirmeleri azaltmak ilk amacın olmalı.
  • 30-01-2015, 00:12:35
    #6
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Orm Kullan. (Bkn: http://www.oguzkoc.com.tr/php-orm-ob...ional-mapping/)