我刚刚发现使用InnoDB引擎的MySQL的以下行为。有没有办法解释执行时间上的显著差异?
第一个查询:
SELECT ask FROM history_time WHERE ask> 1.5790 AND timestamp BETWEEN 1207000800290 AND 1207690900290
执行时间:0.715秒
EXPLAIN: '1', 'SIMPLE', 'history_time', 'range', 'PRIMARY,timestamp,ask,ask_2
我的表中有date和time列。我要选择日期和时间大于当前时间加一个小时的所有对象:
我尝试过以下几种方法:
SELECT * FROM mytable WHERE date >= CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)
然而,这在逻辑上是不正确的。如果日期是明天,且时间小于当前HH:MM,则不会选择该记录。如何使用我的日期和时间与当前日期时间进行比较?我正在使用php 5.2和mysql
我想要获取在最后10秒中添加的记录。我有一个"zaman“列,它具有记录的时间戳,它指示何时添加。
我试过这个,但是它不起作用(没有错误)
mysql_query("SELECT * FROM notifs where writer='".$member[nick]."' AND
zaman >= DATE_SUB(NOW(),INTERVAL 10 SECOND) ORDER BY id DESC limit 5")
or die(mysql_error());
正确的方法是什么?
我为此设置了一个典型的MySQL数据库: post表、user表、comment表。
什么是最好的方式来查询类似“获取我的评论有新评论的帖子”之类的东西?我很难得出如何将其他用户的comment_timestamp大于我的comment_timestamp条件合并到下面的查询中:
我有大致的
SELECT * FROM posts
WHERE posts.id IN
( SELECT DISTINCT posts.id FROM posts,users,comments WHERE comments.post_id = post.id AND comments.user_id = $cur
在我的站点上,我经历了相当高的服务器负载时间,我正在考虑优化一些mysql查询的方法。
我现在做的是:
首先,我数表中所有的汽车,有一定的criteria;If,数大于20,用这些查询数较小的,我做一个更一般的搜索,只是为了给出页面上的一些结果。<code>G 215</code>
有更快的方法吗?
似乎我正在放松性能,使用特定的标准**计数行,并再次查询它们以获取数据。
$car_sql = mysql_query("SELECT COUNT(*) FROM ".$table." WHERE carid IS NOT NULL $criteri
我使用的是MySql 5.5.46,并且有一个包含位列的InnoDB表(名为“ENABLED”)。此列没有索引。该表有2600万行,所以可以理解的是,语句
DELETE FROM my_table WHERE ENABLED = 0;
需要很长时间。我的问题是,有什么我可以做的(不升级MySQL,这目前不是一个选项),以加快运行这个查询所需的时间?我的“innodb_buffer_pool_size”变量设置如下:
show variables like 'innodb_buffer_pool_size';
+-------------------------+--------
在过去的3天里,我一直在执行长时间的SQL查询,没有任何问题,包括今天早上我运行超过1200秒的查询。
但现在我得到了:
> ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query
执行示例如下:
marcelo@node:~$ sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_keepa
我将首先解释我的目标:我希望用户查询数据库,并且仅当这些行自上次查询以来已更新时才返回这些行。没有必要返回他们已经拥有的数据。因此,我创建了一个名为'lastupdated‘的列,这是一种timestamp类型,每当行中的任何内容更新时,它都会自动更新。这可以很好地工作。现在,我想要正确地形成查询。用户将保存上一次查询的时间戳,并通过php将其用于将其上一次查询的时间与每行的更新时间进行比较。如果该行是在上次查询后更新的,则应返回该行。
我做了这样的东西,
SELECT * FROM users WHERE '2011-02-26 01:50:30' <= las
Helllo,我有一个将一些数据写入数据库的查询
mysql_query ("INSERT INTO PVS (time_ended)
VALUES (now())", $db_conx)
or die (mysql_error());
mysql_query ("UPDATE PVS SET break = now() WHERE id = '$id'", $db_conx)
or die (mysql_error());
我想要的是为time_ended存储当前时间+5分钟而不是now(),为break存储当前时间+ 15秒而不是now
我需要创建一个列(比如idletime)来存储时间值,时间值小于或大于24小时。当我尝试插入大于24的值(例如'80:00:00','129:23:12‘等)时,将得到以下错误代码:
java.sql.SQLException: Illegal hour value '80' for java.sql.Time type in value '80:00:00.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
.....
我已在互联网上搜索,发现时间数据类型从
在前面的一个问题中,关于如何限制表单在一小时内提交的次数,有人这样说:
select count(*) from mysql_table where uid='$uid' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR););
这看起来是可行的,但我不知道是怎么回事。首先,我想用IP替换uid:
select count(*) from mysql_table where ip='$ip' and timestamp > (DATE_ADD(now(), INTERVAL -1 HOUR););
我有一个很大的数字数据库,我要在它们之间寻找匹配:
例如:
1112203488
我的表看起来像这样:
sATON | eATON |信息
我在sATON和eATON上有两个索引(名为s和e)
所以我的SQL如下所示:
SELECT *
FROM `data2`
FORCE INDEX ( s, e )
WHERE 1112203488
BETWEEN `sATON`
AND `eATON`;
因此,通常当使用索引时,查询将花费几乎为零的时间(0.02)。但是,有时看起来MySQL中的表统计信息决定执行全表扫描,尽管我强制使用了索引。这是一个巨大的性能损失,因为它将查询时间从0.
我有一个group-by查询,当涉及到索引,连接,发送结果等时,它非常快。不幸的是,当我分析它时,mysql花了99.6%的时间“复制到临时表”。我不知道如何才能让mysql自己表现得更好。
group by查询实质上是查找系统中前20个标记的实体数量。我在这个查询的基础上过滤掉用户选择的标签,实质上缩小了字段的范围。当他们选择一个新标签时,查询性能会显著提高。如果他们选择2个或3个标签,查询会非常快地找到具有这2个或3个标签的实体数量,再加上紧随其后的最受欢迎的标签。
本质上,性能问题是当没有选择标签时,或者选择了1个标签时。解决这个问题的最佳方法是什么?
1)内存缓存,比如ehcache?