Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加快Mysql查询搜索速度_Mysql - Fatal编程技术网

加快Mysql查询搜索速度

加快Mysql查询搜索速度,mysql,Mysql,我们有一个10年前的mysql数据表。对于每个查询,它将搜索2005年至2015年的数据。然而,对我来说最有用的数据将是最近几天或几周的数据。是否可以使用一些命令从表的末尾询问查询搜索 比如说, select *from Portions where Date="20151126" limit 5; 这个简单的查询需要很长时间才能运行。首先,检查数据库的结构。可能是您已经将日期保存为VARCHAR,而它们应该保存为DATE 下一个重要部分是确保表上有一个主键,它应该是INT类型的,并且是主键。

我们有一个10年前的mysql数据表。对于每个查询,它将搜索2005年至2015年的数据。然而,对我来说最有用的数据将是最近几天或几周的数据。是否可以使用一些命令从表的末尾询问查询搜索

比如说,

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”将大大加快速度。不过,最好将其更改为日期类型,方法是添加一个新的日期列并执行更新以转换为该列,然后删除旧列。