Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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_Sql_Query Optimization - Fatal编程技术网

Mysql 数据库索引&;日志记录的查询优化

Mysql 数据库索引&;日志记录的查询优化,mysql,sql,query-optimization,Mysql,Sql,Query Optimization,对于任何给定的记录表,结构如下: CREATE TABLE `example` ( `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `quantity` varchar(15) COLLATE utf8_unicode_ci NOT NULL, `price` varchar(15) COLLATE utf8_unicode_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 CO

对于任何给定的记录表,结构如下:

CREATE TABLE `example` (
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `quantity` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `price` varchar(15) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
在每分钟插入一个条目的情况下,我知道不使用索引离开这个表更有效。但是,当我尝试将类似的表与
SELECT

以下查询的平均速度约为3.7秒

SELECT * FROM (
    SELECT `t1`.`time`,
           `t1`.`quantity` AS `q1`,
           `t1`.`price` AS `p1`,
           `t2`.`quantity` AS `q2`,
           `t2`.`price` AS `p2`
    FROM `example 1` AS `t1`,
         `example 2` AS `t2`
    WHERE `t1`.`time` = `t2`.`time`
    ORDER BY `time` DESC LIMIT 72
) AS dt ORDER BY time ASC;
是否有任何方法可以大幅减少此查询所需的时间?类似的问题,

SELECT * FROM (
    SELECT *
    FROM `example`
    ORDER BY `time` DESC LIMIT 72
) AS dt ORDER BY time ASC;

只需约0.008s。因此,我认为简单地执行两个单独的查询,然后使用PHP对它们进行比较会更有效,但更丑陋。

如果这看起来有点基本,请原谅我,但我发现将内容剥离回基本可以澄清我的想法

索引是组织数据的一种方式,创建数据时需要付出代价。考虑将纸质文件存储在故障机柜中。储存它们的最快方法是把它们塞进任何合适的地方,但如果你以后需要找到它们,你需要检查抽屉里的每一页。相反,如果你想按日期顺序存储它们,那么你需要花更多的时间把它们放进去,但找到它们所花的时间更少

<> P>这是你的权衡——你的索引越多你插入的速度越慢,但是你的选择越快,删除和更新就落在中间某个地方。

对于一个普通的用户生成/访问的表,通常会有更多的选择,它们会接触更多的行,因此需要进行广泛的索引。对于日志表,将有更多的插入,因此使用索引时要小心

但是,按照它们创建的顺序排序索引的开销远小于需要在中间记录新记录的索引,因此在创建的日期时间上索引的日志表不会有巨大的开销。 此外,在您的情况下,每分钟记录1次是一个非常低的比率,因此开销不太可能重要;每秒几百次,在实时工厂记录中并不罕见,这是另一回事


希望这有帮助。

如果您想大量查询“日志记录”表,还需要添加索引。但是为什么需要大量查询日志表呢?我建议-因为,这不会是一个直接帮助用户的操作,获取相关行并单独处理它们(在mysql之外)。查询的强度将取决于用户的数量,目前每天只有几百个。嗯,每桌每分钟一张记录,我现在大约有200张桌子,所以接近每分钟200张,而且只会上升。看来我必须复制这些表,看看索引是否能带来实质性的净差异。