>데이터 베이스 >MySQL 튜토리얼 >mysql에서 제한 쿼리 방법을 사용하는 방법

mysql에서 제한 쿼리 방법을 사용하는 방법

WBOY
WBOY앞으로
2023-05-27 15:05:361826검색

Background

최근 프로젝트 공동 디버깅 중 페이징 쿼리 버그가 발견되었습니다. 페이징 쿼리에서는 항상 데이터를 찾을 수 없거나 반복적으로 발견됩니다.

데이터베이스에는 총 14개의 레코드가 있습니다.

mysql에서 제한 쿼리 방법을 사용하는 방법

페이지당 10개 항목을 팔로우하는 경우. 그러면 첫 번째 페이지와 두 번째 페이지의 쿼리 SQL 합계 결과는 다음과 같습니다.

그러면 문제가 발생합니다. 첫 번째와 두 번째 페이지를 쿼리하면 레코드 11, 12, 13이 표시되지만 레코드4는 표시되지 않습니다. 왜 항상 데이터를 찾을 수 없나요? ? ?

mysql에서 제한 쿼리 방법을 사용하는 방법

SQL

DROP 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');

문제 해결

쿼리 결과를 보면 쿼리 결과가 분명히 특정 열을 기준으로 정렬되지 않은 것을 알 수 있습니다(

매우 지저분함).

그럼 정렬 규칙을 추가하는 것만으로도 충분할까요? 한번 시도해 보자는 태도로 정말 잘 풀렸습니다.

mysql에서 제한 쿼리 방법을 사용하는 방법

분석 문제

order by를 추가하지 않고 제한 쿼리가 나타나는 이유는 무엇입니까?

페이지 쿼리에는 항상 찾을 수 없는 데이터가 있거나 반복적으로 발견됩니다? 암묵적인 순서 정렬이 있나요?

이제

설명이 나타납니다.

mysql에서 제한 쿼리 방법을 사용하는 방법

인덱스에는 검색,

정렬

두 가지 기능이 있습니다. 두 SQL은 서로 다른 인덱스(정렬 규칙)를 사용하기 때문에 인덱스 제한을 사용하면 위의 문제가 발생하고 문제가 해결됩니다.

위 내용은 mysql에서 제한 쿼리 방법을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제