2017-12-29 41 views
0

나는 테이블이 다음 열 products을 (productCode, productName, productDescription, quantityInStock, buyPrice, image)색인은이 문맥에서 능률적 일 것입니까?

다음 쿼리를 수행 할 때 예를 들어 productName에 대한 인덱스가 유용 할 것인가? SELECT * FROM products WHERE productName=:productName? 이와 같은 쿼리

답변

2

: products(productName)에 인덱스가 좋습니다

SELECT * 
FROM products 
WHERE productName = :productName; 

.

+0

쿼리에 대한'buyPrice'를'SELECT * FROM products ORDER BY buyPrice' 및'SELECT * FROM products ORDER BY buyPrice DESC'로 인덱싱하는 것은 어떻습니까? 인덱스는 기본적으로 ASC 순서로 정렬되기 때문에 그렇게하는 것이 효율적이라고 생각합니다. – codeDragon

+0

어떤 일이 일어나는지 보지 않으려면 인덱스 추가, 수정 또는 제거를 통해 데이터를 수정하지 마십시오. –

+0

@codeDragon. . . 새로운 질문은 질문이 아닌 의견으로 물어야합니다. –

0

해당 쿼리에 대해 할 수있는 가장 좋은 방법은 productName을 인덱싱하는 것입니다. 또한 (*)를 선택하지 말고 실제로 필요한 열만 선택하는 것이 좋습니다.

또한 선택할 필요가있는 열이 거의 없거나 하나만 있으면 표지 인덱스를 고려할 수도 있습니다. 예를 들어

: 위의 쿼리

SELECT productName, buyPrice 
FROM products 
WHERE productName = 'test'; 

, 나는 제품에 대한 인덱스 (제품 이름, buyPrice)를 추가합니다. 이렇게하면 데이터베이스가 인덱스를 사용하여 데이터를 필터링하고 검색하는 데 매우 빨라집니다. 위의 의견에 언급 된 다른 쿼리에 대해서는

:

SELECT * FROM products ORDER BY buyPrice 

나는 것 인덱스 제품이 경우 (buyPrice) - 당신이 한 그것의로, ASC 또는 DESC로 주문하는 경우는 문제가되지 않습니다 쿼리에서 일관성이 있습니다 (ORDER BY의 모든 열은 DESC 또는 ASC입니다).

또한 select (*)를 피할 것이고이 쿼리에 LIMIT를 추가하는 것도 고려할 것입니다. 실제로 모든 행이 필요합니까?

+0

모든 열이 필요한 경우에도 여전히'SELECT (*)'를 피하고 대신 모든 열을 나열해야합니까? – codeDragon

+1

모든 열이 필요한 경우 SELECT (*) 문을 명시 적 목록으로 바꾸어도 성능은 향상되지 않지만 확실히 버그 방지에 도움이됩니다. 예를 들어 코드에서 쿼리의 결과로 5 개의 열을 받고 1 년 후에 2 개의 열을 테이블에 추가하면 어떤 일이 발생합니까? 명시 적으로 열 이름을 명시하면 아무 것도 변경되지 않습니다. SELECT (*)를 사용하면 갑자기이 두 열 (코드에서 사용하지 않음)을 얻게되고 나쁜 일이 발생할 수 있습니다. 위의 답변이 도움이 되었다면 질문의 답변으로 수락하는 것을 고려해보십시오. :) –