一、前言中國(guó)省市區(qū)還是不少的 , 省有34個(gè) , 市有391個(gè) , 區(qū)有1101個(gè) , 這是以小編的庫(kù)里的 , 可能不是最新的 , 但是個(gè)數(shù)也差不了多少 。
當(dāng)一次返回所有的數(shù)據(jù) , 并且還要組裝成一個(gè)三級(jí)樹(shù) , 一般的for , 會(huì)循環(huán)34*391*1101次 。這樣就是千萬(wàn)級(jí)的 , 加上與數(shù)據(jù)庫(kù)交互 , 你跑半天也跑不完 。
最后的處理是組長(zhǎng)提供的思路 , 果然很快 。
二、思路首先:小編的省市區(qū)是三張表
第一:我們通過(guò)三次IO從數(shù)據(jù)庫(kù)中查詢(xún)出所有省市區(qū)的數(shù)據(jù) , 下面在進(jìn)行for循環(huán)組裝樹(shù)形效率就很快了!
第二:為了減少I(mǎi)O交互 , 我們把剛剛?cè)〕鰜?lái)的市和區(qū)構(gòu)建為map<provinceCode,List<City>> , map<districtCode,List<District>> , 這樣效率就上來(lái)了!
三、數(shù)據(jù)庫(kù)表設(shè)計(jì)1. 省CREATE TABLE `address_province`(`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',`code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`short_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`new_code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`is_latest` tinyint(3) NULL DEFAULT 1 COMMENT '是否是最新地址 , 0否1是',`remarks` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`created_at` datetime(0) NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',`created_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`updated_at` datetime(0) NULL DEFAULT NULL COMMENT '更新時(shí)間',`updated_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`is_deleted` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '刪除標(biāo)記 , 0:正常;1:刪除',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_code`(`code`) USING BTREE,INDEX `idx_address_province_name`(`name`) USING BTREE,INDEX `idx_address_province_short_name`(`short_name`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '地址省' ROW_FORMAT = Dynamic;2. 市:CREATE TABLE `address_city`(`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',`code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`new_code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`province_code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`is_latest` tinyint(3) NULL DEFAULT 1 COMMENT '是否是最新地址 , 0否1是',`remarks` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`created_at` datetime(0) NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',`created_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`updated_at` datetime(0) NULL DEFAULT NULL COMMENT '更新時(shí)間',`updated_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`is_deleted` tinyint(3) NULL DEFAULT 0 COMMENT '刪除標(biāo)記 , 0正常1刪除',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_code`(`code`) USING BTREE,INDEX `idx_address_city_name`(`name`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 392 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '地址市' ROW_FORMAT = Dynamic;3. 區(qū)CREATE TABLE `address_district`(`id` int(11) NOT NULL AUTO_INCREMENT,`code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`new_code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`city_code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`province_code` char(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`is_latest` tinyint(3) NULL DEFAULT 1 COMMENT '是否是最新地址 , 0否1是',`remarks` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`created_at` datetime(0) NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',`created_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`updated_at` datetime(0) NULL DEFAULT NULL COMMENT '更新時(shí)間',`updated_by` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,`is_deleted` tinyint(3) NULL DEFAULT 0 COMMENT '刪除標(biāo)記 , 0正常1刪除',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uk_code`(`code`) USING BTREE,INDEX `idx_address_district_name`(`name`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 3110 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '地址縣/區(qū)' ROW_FORMAT = Dynamic;
經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀
- 談一次戀愛(ài)就心滿(mǎn)意足的星座
- 樊文花水療多久做一次合適?
- Java代碼審計(jì)之實(shí)戰(zhàn)某博客
- 洗碗機(jī)洗一次碗大概花多少錢(qián) 洗碗機(jī)不能洗什么
- 一次性?xún)?chǔ)奶袋怎么加熱
- 新筷子第一次用要開(kāi)水煮嗎
- java常用注解校驗(yàn)參數(shù)
- 記一次 .NET 某電子病歷 CPU 爆高分析
- 【Java8新特性】- Optional應(yīng)用
- Java 最長(zhǎng)公共前綴
