2014-10-04 2 views
3

이 쿼리가 더 빠르게 실행될 수 있는지 또는 가능하면 더 빠르게 만드는 방법을 알고 싶습니다.이 쿼리를 더 빠르게 실행하는 방법

$result = mysql_query("select 
(select count(1) FROM videos WHERE title LIKE '%Cars%')as Cars, 
(select count(1) FROM videos WHERE title LIKE '%Bikes%') as 'Bikes', 
(select count(1) FROM videos WHERE title LIKE '%Airplanes%') as 'Airplanes', 
(select count(1) FROM videos WHERE title LIKE '%Trucks%') as 'Trucks', 
(select count(1) FROM videos WHERE title LIKE '%Games%') as 'Games'"); 

$row = mysql_fetch_assoc($result); 

foreach($row as $title => $total) 
{ 
    echo '<li> 
<a href="search.php?search='. $title . '&submit= ">'. $title.'&nbsp;&nbsp;'. $total .'</a></li>'; 
} 

echo '<li class="spaceIN"></li><li class="letter">A</li>'; 

이 스크립트의 복사본을 만들어 100 번 붙여 넣으면 정말 느리게로드됩니다. 이

select sum(title LIKE '%Cars%') as cars, 
     sum(title LIKE '%Bikes%') as bikes 
from videos 
+0

'INSERT' /'UPDATE'/DELETE'에 대한'SELECT' 쿼리가 큰 경우,이 카운터들을 별도의 테이블에 저장하고'videos' 테이블을 업데이트 할 때 업데이트 할 수 있습니다. –

답변

4

당신은 불리언 표현식을 통해 sum 기능으로 select 목록에서 인라인 쿼리를 대체 할 수있는 : 다른 답변에서 SQL 제안과 함께

SELECT SUM (title LIKE '%Cars%') as Cars, 
     SUM (title LIKE '%Bikes%') as 'Bikes', 
     SUM (title LIKE '%Airplanes%') as 'Airplanes', 
     SUM (title LIKE '%Trucks%') as 'Trucks', 
     SUM (title LIKE '%Games%') as 'Games' 
FROM videos 
+0

감사합니다. 훨씬 빠릅니다. – Tasos

1

-에 대한 방법보다는 누군가가 그 페이지를 방문 할 때마다 실행되는 질의를 갖는 것입니다. 그럴 경우 데이터베이스에 카운트를 저장하고 Cron 작업을 통해 스크립트를 실행하여 백그라운드에서 정기적으로 업데이트합니다. 그런 다음 해당 페이지에서 저장된 수를 쿼리하십시오. 이는 분명히 상당히 빠릅니다.

0

카테고리 열을 추가하면 카테고리를 추가/변경하는 빈도에 따라 int 또는 enum이 추가됩니다. 다음을 사용할 수 있습니다 :

SELECT COUNT(*) as c, category FROM videos GROUP BY category; 

그 때입니다. 모든 쿼리에 문자열을 사용하는 것보다 범주를 정의하는 것이 좋습니다. 또한 '%'는 인덱스를 사용할 수 없으므로 처음에는 지옥처럼 느립니다.

+0

감사합니다. 하지만 '%'의 속도가 느린 이유는 무엇입니까? – Tasos

+0

** '%'속도가 느린 이유는 무엇입니까? 'car'가 포함 된 각 문장을 찾으려면 책의 모든 문자를 읽어야 만한다면 CAR을 찾기 위해 느리게 색인을 뒤집을 수 있습니까? –

관련 문제