Wic*_*wok 3 php mysql doctrine
我在Doctrine的DQL中有一个查询,它需要能够使用MySQL的"FORCE INDEX"功能,以便大大缩短查询时间.以下是查询在纯SQL中的基本外观:
SELECT id FROM items FORCE INDEX (best_selling_idx)
WHERE price = ... (etc)
LIMIT 200;
Run Code Online (Sandbox Code Playgroud)
我假设我必须扩展一些Doctrine组件才能用DQL执行此操作(或者有没有办法将任意SQL注入到Doctrin的查询之一?).有人有主意吗?
谢谢!
我在网上找到了很少有用的Doctrine_RawSql示例,所以这就是我最后创建查询的内容.
$q = new Doctrine_RawSql();
$q->select('{b.id}, {b.description}, {c.description}')
->from('table1 b FORCE INDEX(best_selling_idx) INNER JOIN table2 c ON b.c_id = c.id')
->addComponent('b', 'Table1 b')
->addComponent('c', 'b.Table2 c');
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢本机 SQL,可以使用以下补丁。https://gist.github.com/arnaud-lb/2704404
此补丁建议仅创建一个自定义 Walker 并进行如下设置
$query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, 'UseIndexWalker');
$query->setHint(UseIndexWalker::HINT_USE_INDEX, 'some_index_name');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4940 次 |
| 最近记录: |