有这样一个表,数据只添加了这些数据
--
-- 表的结构 `personnels_too`
--
CREATE TABLE `personnels_too` (
`id` int(11) NOT NULL COMMENT 'ID',
`name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '姓名',
`relationship` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '关系',
`Gender` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '性别',
`nation` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '民族',
`uid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '身份证号码',
`phone` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机号码',
`Culture` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '文化程度',
`marriage` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '婚姻状况',
`family` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '家庭户主',
`family_uid` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '户主身份证',
`life` int(11) DEFAULT NULL COMMENT '生存状况()',
`Village` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '村组',
`remarks` text COLLATE utf8_unicode_ci COMMENT '备注',
`WorkingAddress` text COLLATE utf8_unicode_ci,
`addtime` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`uptime` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='常驻人员名单';
--
-- 转存表中的数据 `personnels_too`
--
INSERT INTO `personnels_too` (`id`, `name`, `relationship`, `Gender`, `nation`, `uid`, `phone`, `Culture`, `marriage`, `family`, `family_uid`, `life`, `Village`, `remarks`, `WorkingAddress`, `addtime`, `uptime`) VALUES
(1, '张三', '户主', '男', '汉', '101100202202052252', '18888888888', '高中', '已婚', '张三', '101100202202052252', 1, '田系组', NULL, NULL, '', ''),
(2, '李娥', '配偶', '女', '汉', '101100202102052243', '18888888888', '高中', '已婚', '张三', '101100202202052252', 1, '田系组', NULL, NULL, '', ''),
(3, '王五', '户主', '男', '汉', '101100201102052243', '18888888888', '高中', '已婚', '王五', '101100201102052243', 1, '田系组', NULL, NULL, '', ''),
(4, '丽丽', '女', '女 ', '汉', '101100201702052243', '18888888888', '高中', '已婚', '王五', '101100201102052243', 1, '田系组', NULL, NULL, '', ''),
(5, '李爱', '女儿', '女', '汉', '101100202204052243', '18888888888', '高中', '未婚', '张三', '101100202202052252', 1, '田系组', NULL, NULL, '', '');
--
-- 转储表的索引
--
--
-- 表的索引 `personnels_too`
--
ALTER TABLE `personnels_too`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id` (`id`);
--
-- 在导出的表使用AUTO_INCREMENT
--
--
-- 使用表AUTO_INCREMENT `personnels_too`
--
ALTER TABLE `personnels_too`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', AUTO_INCREMENT=6;
COMMIT;
`
上面的人员数据是乱插入的,输出的是这样
然后,我想实现如下效果:
用的sql是
SELECT * FROM (SELECT `name`,`family_uid` FROM `personnels_too` WHERE `uid`=`family_uid`) as dd RIGHT JOIN (SELECT `name`,`family_uid` FROM `personnels_too`) as vv ON dd.`family_uid`=vv.`family_uid`
数据少的时候,速度还可以,但到2000多人以上,速度就直线下降,各位有什么优化方式吗,
具体就是让后插入的人员,要在前端和户主排在一起,并且户主显示在该组的最上面
@李沐沐,你需要呼叫老虎,但是吧,就是管理发的帖子也要审核。
一加8Pro
@李沐沐,可以试试读写分离。
一加8Pro
@李沐沐,具体请教老虎大大。
一加8Pro
@李沐沐,不能写成这样吗?
SQLite
代码看需要加索引
结果
@李沐沐,5 楼的尝试了吗?效果咋样?
@李沐沐,你还希望,户主ID较小的整个家庭排前面,是嘛?若是:
SQL
代码若速度太慢,可加索引。看具体需要(加个
KEY(uid)
应该可以大幅加速。但总共就几千行,原来的速度应该也不会太慢)结果
@李沐沐,加个
KEY(uid)
试试?另外,如果你能将
family_uid
的实际意义,从 身份证号 换成 户主id
,就不用加KEY(uid)
了