programing

MySQL의 Force Index - 어디에 배치해야 합니까?

javaba 2022. 11. 26. 21:30
반응형

MySQL의 Force Index - 어디에 배치해야 합니까?

완벽하게 작동하는 다음 MySQL 쿼리가 있습니다.단, I doespair에 추가할 필요가 있는 것은FORCE INDEX어디서 해야 할지 모르겠어요.모든 장소에서 시도했지만 항상 MySQL 오류가 발생합니다.내가 뭘 잘못하고 있지?

최초 쿼리는 다음과 같습니다.

$sql_select_recent_items = $db->query("SELECT * FROM (SELECT owner_id, product_id, start_time, price, currency, name, closed, active, approved, deleted, creation_in_progress FROM db_products ORDER BY start_time DESC) as resultstable
WHERE resultstable.closed=0 AND resultstable.active=1 AND resultstable.approved=1 AND resultstable.deleted=0 AND resultstable.creation_in_progress=0
GROUP BY resultstable.owner_id
ORDER BY start_time DESC");

쿼리는 다음과 같이 구성되어 있기 때문에ORDER BY이 되기 전에GROUP BY궁금하실지 모르니까

추가할 내용은 다음과 같습니다.

FORCE INDEX (products_start_time)

모든 곳에서 시도했지만 성공하지 못했는데, 제가 놓치고 있는 더 복잡한 무언가가 있다고 믿으시나요?

인덱스 힌트의 구문은 다음과 같습니다.
http://dev.mysql.com/doc/refman/5.6/en/index-hints.html

FORCE INDEX는 테이블 참조 바로 뒤에 표시됩니다.

SELECT * FROM (
    SELECT owner_id,
           product_id,
           start_time,
           price,
           currency,
           name,
           closed,
           active,
           approved,
           deleted,
           creation_in_progress
    FROM db_products FORCE INDEX (products_start_time)
    ORDER BY start_time DESC
) as resultstable
WHERE resultstable.closed = 0
      AND resultstable.active = 1
      AND resultstable.approved = 1
      AND resultstable.deleted = 0
      AND resultstable.creation_in_progress = 0
GROUP BY resultstable.owner_id
ORDER BY start_time DESC

경고:

사용하시는 경우ORDER BY전에GROUP BY최신 엔트리를 취득하다owner_id이를 위해 MySQL의 비표준적이고 문서화되어 있지 않은 동작을 사용하고 있습니다.

향후 MySQL 버전에서 계속 작동한다는 보장은 없으며 쿼리는 다른 RDBMS에서 오류가 발생할 수 있습니다.

이러한 유형의 쿼리에 대한 더 나은 솔루션에 대한 많은 설명을 보려면 그룹당 큰 n개 태그를 검색하십시오.

FORCE INDEX 는 MySQL 8 이후 폐지됩니다.

그러므로, 당신은 예상해야 한다.USE INDEX,FORCE INDEX,그리고.IGNORE INDEX향후 MySQL 릴리즈에서 폐지될 예정이며 이후 완전히 삭제될 예정입니다.

사용하셔야 합니다.JOIN_INDEX,GROUP_INDEX,ORDER_INDEX,그리고.INDEX대신 v8용입니다.

이 문서에서는, 이러한 문서에는 미묘한 의미가 있기 때문에, 지금까지의 기능에 비해, 옵티마이저에게 전하는 내용을 보다 세세하게 제어할 수 있습니다.문서에서 자세한 내용을 읽을 수 있지만 "force index"와 동등한 내용만 필요한 경우 SELECT 직후에 테이블과 인덱스를 특별한 코멘트로 지정하여 읽을 수 있습니다.

SELECT /*+ index(table_name index_name) */ col1, col2 FROM table_name;

언급URL : https://stackoverflow.com/questions/19061873/force-index-in-mysql-where-do-i-put-it

반응형