Как оптимизировать сумму в MySQL - PullRequest
0 голосов
/ 12 июня 2019

У меня есть код для суммирования наличных от транзакции, как это,

public function get_total_cash($date_from, $date_to){
        $filtered_order = array('Ordered', 'Validated','Awaiting Packing','Packing Process','Ready to Ship','Shipped','Completed');
        $op_status = array('settlement','capture');

        $this->db->select('CAST(SUM(op_total) AS int) as total');
        $this->db->from("(dashboard_sales)");
        $this->db->where('order_date >=', date('Y-m-d 00:00:00',strtotime($date_from)));
        $this->db->where('order_date <=', date('Y-m-d 23:59:59',strtotime($date_to)));
        $this->db->where_in('order_status',$filtered_order);
        $this->db->where_in('op_status',$op_status);
        $query = $this->db->get();
        return $query->result()[0]->total;
    }

но проблема в том, что транзакции на моем сайте были чрезмерными, и когда я извлек код, он стал длинным. Транзакции в моей базе данных - это более 25 тысяч данных.

как сделать процесс суммирования более оптимизированным в моем случае?

Ответы [ 4 ]

0 голосов
/ 14 июня 2019

Это может помочь:

ALTER TABLE dashboard_sales
    ADD INDEX(order_status, op_status, order_date);

Если вам нужна дополнительная помощь, укажите SHOW CREATE TABLE dashboard_sales, размер таблицы и EXPLAIN SELECT ...

0 голосов
/ 12 июня 2019

Создайте некластеризованный индекс по используемым столбцам, например так:

CREATE INDEX MyIndex
    ON dashboard_sales(op_total, order_date)

Проверьте план запроса до и после создания индекса, вы увидите разницу.Вы можете включить или не включать столбец op_total, протестировать свой индекс и увидеть в плане.

Добавление индекса уменьшит количество сканирований в вашем кластерном индексе, а с помощью EXPLAIN вы можете увидеть количество сканирований наоператор.

0 голосов
/ 13 июня 2019

сделайте группировку по первичному ключу в вашем запросе и добавьте индекс в таблицу, чтобы транзакции выполнялись быстрее.

0 голосов
/ 12 июня 2019

Без детального знания структуры вашей базы данных я бы предложил записать этот запрос codeigniter в запрос SQL.

Используйте ключевое слово EXPLAIN, чтобы увидеть план выполнения запроса с помощью phpmyadmin, mysqlworkbench, инструмента, которым вы являетесьболее знакомы с.Поскольку это довольно простой запрос, я предполагаю, что вам не хватает индексов в полях из условия where.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...