2013-09-25 25 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