2013-09-25 95 views
0

以下查询采取10.86secs发起,PHP加载倍

$sql="SELECT items.id i_id, status,manufacturerid,model,label,cpuno,corespercpu 
     from items,item2soft 
     where item2soft.itemid=items.id AND item2soft.softid={$r['id']} 
     order by label asc "; 

尽管此代码取码23.73secs

$sql="SELECT items.id i_id, status,manufacturerid,model,label,cpuno,corespercpu 
     from items,item2soft 
     where item2soft.itemid=items.id AND item2soft.softid={$r['id']}"; 

唯一的区别两者是后者具有ORDER BY关键字。有什么办法让它更快。请随时问我任何东西。感谢您的帮助:)

+2

做一个解释对数据库的查询,看看,看看什么(如果有的话)正在使用的索引 –

+0

**通过构建带有外部变量的SQL语句,您可以全面开放SQL注入攻击。**另外,任何带有单引号的输入数据,如“O'Malley”的名称,都会导致您的SQL查询。请了解使用参数化查询(最好是使用PDO模块)来保护您的Web应用程序。 http://bobby-tables.com/php有例子让你开始,并且[这个问题](http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in- php)有很多例子的细节。 –

回答

2

看完您的查询 - 我的意思是:添加适当的缩进,所以我可以真正阅读它 - 你可能只需要添加一些索引。

$sql = "SELECT 
    items.id i_id, 
    status, 
    manufacturerid, 
    model, 
    label, 
    cpuno, 
    corespercpu 
FROM 
    items, 
    item2soft 
WHERE 
    item2soft.itemid = items.id 
    AND item2soft.softid = {$r['id']} 
ORDER BY label ASC" 

item2soft.itemid添加索引和item2soft.softid

如果它仍然是缓慢的,运行一个EXPLAIN

+0

感谢Frits,我是这个PHP SQLite交易的新手。请告诉我一种方法来为现有表添加索引。 – Carter

+0

如果在添加ORDER BY子句时发生减速,我猜测无论哪个表都包含该列需要一个复合索引... –

+0

@Carter使用Adminer或PHPMyAdmin来获取数据库的良好视图。他们有一个很好的GUI来添加索引。 – Halcyon