MySQL에서 테이블 인덱스 최적화
P粉841870942
2023-07-25 09:47:08
<p>다음 표(검색 추적)가 있습니다. </p>
<pre class="brush:sql;toolbar:false;">CREATE TABLE `검색`(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`삭제`tinyint(1) unsigned NOT NULL,
`query` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`userId` int(10) unsigned NOT NULL,
`connectionId` int(10) unsigned NOT NULL,
`pluginId` int(10) unsigned NOT NULL,
기본 키(`id`),
KEY `키,삭제됨` (`publicId`, `삭제됨`),
KEY `삭제됨,userId` (`삭제됨`,`userId`),
KEY `삭제됨,connectionId,pluginId` (`삭제됨`,`connectionId`,`pluginId`)
) 엔진=InnoDB 기본 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
</pre>
<p>가끔 특정 사용자가 수행한 모든 쿼리를 반환하는 쿼리를 실행합니다. 이 경우 삭제됨, userId 열이 포함된 인덱스가 있습니다. <코드></code></p>
<p>어떤 경우에는 특정 "연결" 및 "플러그인"에 의해 실행된 모든 쿼리를 반환하는 쿼리를 실행합니다. 이 경우 삭제됨, 연결 ID, 플러그인 ID 열이 포함된 인덱스가 있습니다. <코드></code></p>
<p>인덱스의 크기가 크게 증가하고 있어 인덱스를 더 잘 최적화하는 방법을 알아보고 있습니다. </p>
<p>이 두 인덱스를 하나로 병합하는 것이 가치가 있나요? 예를 들어, 다음 열이 포함될 수 있습니다: <code>deleted</code>,<code>userId</code>,<code>connectionId</code>,<code>pluginId</code>< ;/p>
<p>이렇게 하면 쿼리 요구 사항을 충족하면서도 인덱스 크기가 줄어들지는 잘 모르겠습니다. </p>
색인을 여러 번 사용할 수 있지만 필드를 건너뛰지 않고 왼쪽에서 오른쪽으로만 사용할 수 있습니다. 예: 인덱스(필드 A, 필드 B, 필드 C), 이 인덱스를 사용하여 필드 A를 쿼리하거나 필드 A와 필드 B를 쿼리하거나 필드 A, 필드 B와 필드 C를 쿼리할 수 있지만 사용할 수는 없습니다. 필드 A와 필드 C 또는 필드 B와 필드 C에 액세스합니다.
따라서 귀하의 문의에는 해당되지 않습니다.