집 >데이터 베이스 >MySQL 튜토리얼 >mysql에서 제한 쿼리 방법을 사용하는 방법
최근 프로젝트 공동 디버깅 중 페이징 쿼리 버그가 발견되었습니다. 페이징 쿼리에서는 항상 데이터를 찾을 수 없거나 반복적으로 발견됩니다.
데이터베이스에는 총 14개의 레코드가 있습니다.
페이지당 10개 항목을 팔로우하는 경우. 그러면 첫 번째 페이지와 두 번째 페이지의 쿼리 SQL 합계 결과는 다음과 같습니다.
그러면 문제가 발생합니다. 첫 번째와 두 번째 페이지를 쿼리하면 레코드 11, 12, 13이 표시되지만 레코드4는 표시되지 않습니다. 왜 항상 데이터를 찾을 수 없나요? ? ?
SQLDROP TABLE IF EXISTS `creative_index`; CREATE TABLE `creative_index` ( `id` bigint(20) NOT NULL COMMENT 'id', `creative_id` bigint(20) NOT NULL COMMENT 'creative_id', `name` varchar(256) DEFAULT NULL COMMENT 'name', `member_id` bigint(20) NOT NULL COMMENT 'member_id', `product_id` int(11) NOT NULL COMMENT 'product_id', `template_id` int(11) DEFAULT NULL COMMENT 'template_id', `resource_type` int(11) NOT NULL COMMENT 'resource_type', `target_type` int(11) NOT NULL COMMENT 'target_type', `show_audit_status` tinyint(4) NOT NULL COMMENT 'show_audit_status', `bound_adgroup_status` int(11) NOT NULL COMMENT 'bound_adgroup_status', `gmt_create` datetime NOT NULL COMMENT 'gmt_create', `gmt_modified` datetime NOT NULL COMMENT 'gmt_modified', PRIMARY KEY (`id`), KEY `idx_member_id_product_id_template_id` (`member_id`,`product_id`,`template_id`), KEY `idx_member_id_product_id_show_audit_status` (`member_id`,`product_id`,`show_audit_status`), KEY `idx_creative_id` (`creative_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='测试表'; -- ---------------------------- -- Records of creative_index -- ---------------------------- INSERT INTO `creative_index` VALUES ('1349348501', '511037002', '1', '1', '1', '1000695', '26', '1', '7', '0', '2023-03-16 22:12:56', '2023-03-24 23:38:49'); INSERT INTO `creative_index` VALUES ('1349348502', '511037003', '2', '1', '1', '1000695', '26', '1', '7', '1', '2023-03-16 22:15:29', '2023-03-24 21:23:33'); INSERT INTO `creative_index` VALUES ('1391561502', '512066002', '3', '1', '1', '1000695', '26', '1', '7', '0', '2023-03-23 23:37:34', '2023-03-24 21:24:04'); INSERT INTO `creative_index` VALUES ('1394049501', '511937501', '4', '1', '1', '1000942', '2', '1', '0', '0', '2023-03-24 14:00:46', '2023-03-25 15:19:37'); INSERT INTO `creative_index` VALUES ('1394221002', '511815502', '5', '1', '1', '1000694', '26', '1', '7', '0', '2023-03-23 17:00:41', '2023-03-24 21:23:39'); INSERT INTO `creative_index` VALUES ('1394221003', '511815503', '6', '1', '1', '1000694', '26', '1', '3', '0', '2023-03-23 17:22:00', '2023-03-24 21:23:44'); INSERT INTO `creative_index` VALUES ('1394257004', '512091004', '7', '1', '1', '1000694', '26', '1', '7', '0', '2023-03-23 17:23:21', '2023-03-24 21:24:11'); INSERT INTO `creative_index` VALUES ('1394257005', '512091005', '8', '1', '1', '1000694', '26', '1', '3', '0', '2023-03-23 17:31:05', '2023-03-25 01:10:58'); INSERT INTO `creative_index` VALUES ('1403455006', '512170006', '9', '1', '1', '1000694', '26', '1', '0', '0', '2023-03-25 15:31:02', '2023-03-25 15:31:25'); INSERT INTO `creative_index` VALUES ('1403455007', '512170007', '10', '1', '1', '1000695', '26', '1', '0', '0', '2023-03-25 15:31:04', '2023-03-25 15:31:28'); INSERT INTO `creative_index` VALUES ('1406244001', '512058001', '11', '1', '1', '1000694', '26', '1', '3', '0', '2023-03-23 21:28:11', '2023-03-24 21:23:56'); INSERT INTO `creative_index` VALUES ('1411498502', '512233003', '12', '1', '1', '1000694', '26', '1', '0', '0', '2023-03-25 14:34:37', '2023-03-25 17:00:24'); INSERT INTO `creative_index` VALUES ('1412288501', '512174007', '13', '1', '1', '1000694', '26', '1', '7', '0', '2023-03-25 01:11:53', '2023-03-25 01:12:34'); INSERT INTO `creative_index` VALUES ('1412288502', '512174008', '14', '1', '1', '1000942', '2', '1', '0', '0', '2023-03-25 11:46:44', '2023-03-25 15:20:58');
매우 지저분함).
그럼 정렬 규칙을 추가하는 것만으로도 충분할까요? 한번 시도해 보자는 태도로 정말 잘 풀렸습니다.
분석 문제order by를 추가하지 않고 제한 쿼리가 나타나는 이유는 무엇입니까?페이지 쿼리에는 항상 찾을 수 없는 데이터가 있거나 반복적으로 발견됩니다? 암묵적인 순서 정렬이 있나요?
이제설명이 나타납니다.
인덱스에는 검색,정렬
두 가지 기능이 있습니다. 두 SQL은 서로 다른 인덱스(정렬 규칙)를 사용하기 때문에 인덱스 제한을 사용하면 위의 문제가 발생하고 문제가 해결됩니다.위 내용은 mysql에서 제한 쿼리 방법을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!