我使用CakePHP 3.3并尝试使用以下查询获取有关收入的一些统计信息
$this->Bookings
->find('all')
->select(['total' => 'sum(total_price)'])
->join($joinTables) // It has product and few other tables
->where(["P.id = '" . $product_id . "'"])
->where(["Bookings.booking_status != 'CANCELLED'"])
->where(["Bookings.booking_date >= '" . $last6MonthDate->format('Y-m-d') . "'"]);
此查询使用索引(product_id,booking_status),但是,我希望此查询使用我在(product_id,booking_date)上创建的索引,这对于此查询会更快。我在上面的查询之前尝试使用以下行。
$this->Bookings->useIndex = 'FORCE INDEX(idx_product_id_booking_date)';
这并没有将FORCE INDEX子句添加到我的查询中,因此,MySQL会自动使用索引idx_product_id_booking_status
。
类似问题的答案是针对CakePHP的早期版本,它们不适用于CakePHP 3.3。请帮忙。
答案 0 :(得分:0)
这个例子展示了如何在 select
和 join
语句中使用索引:
$this->loadModel('MainModel');
$query = $this
->MainModel
->select(['MainModel.id' ])
->from('main_model MainModel USE INDEX (PRIMARY)')
->join([
'table' => 'other_model OtherModel USE INDEX (PRIMARY)',
'conditions' => 'OtherModel.id = MainModel.other_model_id'
]);
这将产生:
SELECT MyModel.id
FROM my_model MyModel USE INDEX (PRIMARY)
INNER JOIN my_other_model MyOtherModel USE INDEX (PRIMARY)
ON MyModel.id = MyModel.my_model_other_id