Skip to content

Commit 1cbfad4

Browse files
committed
[sql]: index performance
1 parent 1bf12c2 commit 1cbfad4

File tree

1 file changed

+32
-25
lines changed

1 file changed

+32
-25
lines changed

setup/schema.sql

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,12 @@
11
SET NAMES utf8mb4;
22
SET FOREIGN_KEY_CHECKS = 0;
33

4-
DROP TABLE IF EXISTS `feed_items`;
5-
CREATE TABLE `feed_items` (
6-
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
7-
`feed_id` int(10) UNSIGNED NOT NULL,
8-
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
9-
`author` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
10-
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
11-
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
12-
`image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
13-
`guid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
14-
`published_at` datetime NULL DEFAULT NULL,
15-
`is_visible` tinyint(1) NULL DEFAULT 1,
16-
`created_at` datetime NULL DEFAULT current_timestamp(),
17-
`updated_at` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,
18-
PRIMARY KEY (`id`) USING BTREE,
19-
UNIQUE INDEX `unique_item`(`feed_id`, `guid`) USING BTREE,
20-
FULLTEXT INDEX `idx_title_content`(`title`, `content`),
21-
CONSTRAINT `feed_items_ibfk_1` FOREIGN KEY (`feed_id`) REFERENCES `feeds` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
22-
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
23-
244
DROP TABLE IF EXISTS `feeds`;
25-
CREATE TABLE `feeds` (
5+
CREATE TABLE `feeds` (
266
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
277
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
28-
`feed_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
29-
`site_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
8+
`feed_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
9+
`site_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
3010
`feed_type` enum('rss1','rss2','atom','rdf','csv','json','xml') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
3111
`last_post_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
3212
`last_checked` datetime NULL DEFAULT NULL,
@@ -36,9 +16,36 @@ CREATE TABLE `feeds` (
3616
`updated_at` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,
3717
`language` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
3818
PRIMARY KEY (`id`) USING BTREE,
39-
UNIQUE INDEX `feed_url`(`feed_url`) USING BTREE,
19+
UNIQUE INDEX `feed_url`(`feed_url`(255)) USING,
4020
INDEX `idx_feed_status`(`status`) USING BTREE,
41-
INDEX `idx_feed_type`(`feed_type`) USING BTREE
21+
INDEX `idx_feed_type`(`feed_type`) USING BTREE,
22+
INDEX `idx_last_checked`(`last_checked`) USING BTREE,
23+
INDEX `idx_last_updated`(`last_updated`) USING BTREE,
24+
INDEX `idx_status_checked`(`status`, `last_checked`) USING BTREE
25+
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
26+
27+
DROP TABLE IF EXISTS `feed_items`;
28+
CREATE TABLE `feed_items` (
29+
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
30+
`feed_id` int(10) UNSIGNED NOT NULL,
31+
`title` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
32+
`author` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
33+
`content` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
34+
`url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
35+
`image_url` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
36+
`guid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
37+
`published_at` datetime NULL DEFAULT NULL,
38+
`is_visible` tinyint(1) NULL DEFAULT 1,
39+
`created_at` datetime NULL DEFAULT current_timestamp(),
40+
`updated_at` datetime NULL DEFAULT current_timestamp() ON UPDATE CURRENT_TIMESTAMP,
41+
PRIMARY KEY (`id`) USING BTREE,
42+
UNIQUE INDEX `unique_item`(`feed_id`, `guid`) USING BTREE,
43+
FULLTEXT INDEX `idx_title_content`(`title`, `content`),
44+
INDEX `idx_published_at`(`published_at`) USING BTREE,
45+
INDEX `idx_is_visible`(`is_visible`) USING BTREE,
46+
INDEX `idx_feed_published`(`feed_id`, `published_at`) USING BTREE,
47+
INDEX `idx_feed_visible`(`feed_id`, `is_visible`) USING BTREE,
48+
CONSTRAINT `feed_items_ibfk_1` FOREIGN KEY (`feed_id`) REFERENCES `feeds` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT
4249
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
4350

4451
SET FOREIGN_KEY_CHECKS = 1;

0 commit comments

Comments
 (0)