加快Mysql查询搜索速度
我们有一个10年前的mysql数据表。对于每个查询,它将搜索2005年至2015年的数据。然而,对我来说最有用的数据将是最近几天或几周的数据。是否可以使用一些命令从表的末尾询问查询搜索 比如说,加快Mysql查询搜索速度,mysql,Mysql,我们有一个10年前的mysql数据表。对于每个查询,它将搜索2005年至2015年的数据。然而,对我来说最有用的数据将是最近几天或几周的数据。是否可以使用一些命令从表的末尾询问查询搜索 比如说, select *from Portions where Date="20151126" limit 5; 这个简单的查询需要很长时间才能运行。首先,检查数据库的结构。可能是您已经将日期保存为VARCHAR,而它们应该保存为DATE 下一个重要部分是确保表上有一个主键,它应该是INT类型的,并且是主键。
select *from Portions where Date="20151126" limit 5;
这个简单的查询需要很长时间才能运行。首先,检查数据库的结构。可能是您已经将日期保存为VARCHAR,而它们应该保存为DATE 下一个重要部分是确保表上有一个主键,它应该是INT类型的,并且是主键。您还应该使此自动递增,以便它保持表的唯一ID。结构如下:
--
-- Table structure for table `portions`
--
CREATE TABLE IF NOT EXISTS `portions` (
`id` int(11) NOT NULL,
`date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Indexes for table `portions`
--
ALTER TABLE `portions`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for table `portions`
--
ALTER TABLE `portions`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
确保此结构正确,并使用正确的语法进行查询:
SELECT * FROM `portions` WHERE `date` = '2015-11-26' LIMIT 5;
现在,你应该发现你的查询要快得多。
你应该考虑在这个场景中使用物化视图。查看是否要使用它。日期列的数据类型是什么?从查询的字符串格式来看,它可能是varchar类型,而不是正确的日期/日期时间类型。如果您可以将其转换为带有索引的真实日期类型,则按顺序使用它将非常快。如果由于某种原因,无法更改数据类型(尽管您确实应该更改),如果该列中的字符串的格式一致为YYMMDD,则仅在其上创建一个索引作为varchar列将允许您快速排序,但MySQL内置的日期处理功能并不能让您受益。你是说我需要把整张桌子整理一下吗?我尝试了按日期排序,运行它也需要时间。日期列上有索引吗?要创建索引,可以使用ALTER TABLE PARTIONS ADD index Date。然后,对最近的项目使用“按日期排序描述限制5”将大大加快速度。不过,最好将其更改为日期类型,方法是添加一个新的日期列并执行更新以转换为该列,然后删除旧列。