小编blu*_*row的帖子

带索引的mysql datetime字段获得范围'like'与'between和'性能

我只是发现mysql可以使用如下方式查询datetime:

like '2013-06-12%'
Run Code Online (Sandbox Code Playgroud)

我认为它不能使用索引.我谷歌,但直接找不到这样的主题.所以我使用3308614记录的表进行了测试.第一个SQL:

SELECT * FROM subscription t WHERE DATE(t.active_time) = '2013-06-30';
Run Code Online (Sandbox Code Playgroud)

我们都知道这个SQL不能使用索引,需要4秒才能得到结果.第二个SQL:

SELECT * FROM subscription t WHERE t.active_time LIKE '2013-06-30%';
Run Code Online (Sandbox Code Playgroud)

我不知道它是否可以使用索引,但它也需要4秒.第三个SQL:

SELECT * FROM subscription t WHERE t.active_time > '2007-11-30' AND t.active_time < '2007-12-01';
Run Code Online (Sandbox Code Playgroud)

我们都知道第三个SQL可以使用索引,它需要0.016秒.

所以我认为'like'在查询datetime字段时不能使用索引,因为mysql应该首先将datetime字段转换为字符串并将字符串发送到like命令.它是否正确 ?

mysql datetime between sql-like

9
推荐指数
2
解决办法
2万
查看次数

intellij idea模块默认为"user.dir"

我对intellij的想法很新鲜.我只是导入了几个项目eclipse,它是intellij想法中的模块.
我在一个模块中运行一个main并获得file can not found异常.我检查user.dir参数并直接找到另一个模块(该模块是我导入eclipse项目时的第一个模块).

System.out.println(System.getProperty("user.dir"));
Run Code Online (Sandbox Code Playgroud)

我只想在一个模块中运行main时将user.dir设置为该模块目录.怎么设置呢?

eclipse projects module path intellij-idea

7
推荐指数
1
解决办法
3267
查看次数

mysql如何更新自己的表工作

我在MYSQL中有一个表:

CREATE TABLE test.tem(a INT,b INT);    
Run Code Online (Sandbox Code Playgroud)

以下数据:

INSERT INTO test.tem VALUES(1,2),(1,1),(1,NULL),(2,3);
Run Code Online (Sandbox Code Playgroud)

现在数据应该是:

+------+------+
| a    | b    |
+------+------+
|    1 |    2 |
|    1 |    1 |
|    1 | NULL |
|    2 |    3 |
+------+------+
Run Code Online (Sandbox Code Playgroud)

我想按列a将列b更新到min(b)组.

所以SQL应该是:

UPDATE test.tem o
SET o.b = (SELECT
             MIN(b)
           FROM test.tem i
           WHERE i.a = o.a)
Run Code Online (Sandbox Code Playgroud)

但是MYSQL 无法在FROM子句中指定更新目标表

所以我认为下面的SQL可以很好地解决我的问题:

UPDATE test.tem t1
  JOIN test.tem t2
    ON t1.a = t2.a
SET t1.b = t2.b
WHERE t1.b IS NULL
     OR t1.b …
Run Code Online (Sandbox Code Playgroud)

mysql sql group-by sql-update

5
推荐指数
1
解决办法
9901
查看次数