如何提高mysql中大文本查询的速度

时间:2019-07-17 04:42:41

标签: mysql amazon-rds

我的数据库具有以下架构。

CREATE TABLE `std_reslt` (
       `student_id` int NOT NULL,
       `date` date NOT NULL,
       `info` LONGTEXT,
       `result ` LONGTEXT, 
       `result_ids` LONGTEXT,
       `sid` int NOT NULL
) ENGINE=InnoDB
PARTITION BY KEY(student_id)
PARTITIONS 50;
CREATE INDEX `student_date`
ON date_uri_pair (`student_id`, `date`);
CREATE INDEX `date_sid`
ON date_uri_pair (`date`, `sid`);

信息包含序列化的字符串值。序列化的数据是大量JSON字符串的集合。这是如此巨大,以至于我们需要在同一日期将数据划分为多行。现在,当我们尝试使用以下查询查询数据库时,要花很长时间才能获得结果,尤其是在日期范围较大时。

SELECT info, result_ids FROM std_reslt WHERE student_id =30 AND date >= '2019-05-01' and date<= ''2019-05-30'

我需要获取数据,将包含数据的信息反序列化为:

[{"john":35, "john":75, "Haris":30, "Haris":40 .....}]

目标是通过添加所有信息值来查找前N条记录,例如:

[{"john":110, "Haris":70}]

除了LongText之外,是否还有其他数据类型,因为我认为InnoDB对LongText数据使用了不同的方法。如果我尝试反序列化数据并将每个数据存储在单独的列中,那么大小将非常大

1 个答案:

答案 0 :(得分:-1)

CREATE INDEX `student_date`
ON date_uri_pair (`student_id`, `date`);
 WHERE student_id =30 AND date >= '2019-05-01' and date<= ''2019-05-30'

您有一系列条件,并且有多个列索引。 尝试分离索引,一个用于日期,一个用于学生。