小编nic*_*ick的帖子

MySQL更新CASE WHEN/THEN/ELSE

我正在尝试使用CLI脚本更新LARGE MyISAM表(2500万条记录).该表未被其他任何东西锁定/使用.

我想而不是为每条记录做单个UPDATE查询,我不妨使用CASE功能.

id领域是主要的.我怀疑以下查询应该花费几毫秒.

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    END
Run Code Online (Sandbox Code Playgroud)

瞧,查询占用了CPU,并没有永远完成.

然后,令我惊讶的是,我发现查询正在更新所有2500万行,在我没有指定的行上放置NULL.

那是什么意思?我是否可以在每次执行此查询时仅对特定行执行MASS更新而不更新2500万行?或者我是否必须进行单独更新然后提交?

mysql

76
推荐指数
4
解决办法
14万
查看次数

PHP CLI include()找不到该文件

我的文件结构如下:

config.php
script
|--myscript.php
Run Code Online (Sandbox Code Playgroud)

myscript.php

<?php
require '../config.php';
?>
Run Code Online (Sandbox Code Playgroud)

执行时,php /path/to/myscript.php我得到Warning: require(../config.php): failed to open stream: No such file or directory.

什么原因?

php

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

PHP同时打破并继续

我有一个像这样的嵌套循环:

while(1){

    while($something){
        break & continue;
    }
    // More stuff that I don't want to process in this situation
}
Run Code Online (Sandbox Code Playgroud)

我想突破第二个while循环并从头开始继续第一个循环(没有完成第一个循环).这可能不使用变量吗?

php loops nested-loops

11
推荐指数
1
解决办法
3492
查看次数

InnoDB插入速度非常慢,速度慢

我最近将我的项目表切换到InnoDB(认为关系将是一件好事).我正在使用PHP脚本一次索引大约500个产品.

存储word/ids关联的表:

    CREATE TABLE `windex` (
 `word` varchar(64) NOT NULL,
 `wid` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `count` int(11) unsigned NOT NULL DEFAULT '1',
 PRIMARY KEY (`wid`),
 UNIQUE KEY `word` (`word`)
) ENGINE=InnoDB AUTO_INCREMENT=324551 DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

另一个表存储产品ID /字ID关联:

CREATE TABLE `indx_0` (
 `wid` int(7) unsigned NOT NULL,
 `pid` int(7) unsigned NOT NULL,
 UNIQUE KEY `wid` (`wid`,`pid`),
 KEY `pid` (`pid`),
 CONSTRAINT `indx_0_ibfk_1` FOREIGN KEY (`wid`) REFERENCES `windex` (`wid`) ON DELETE CASCADE ON UPDATE CASCADE,
 CONSTRAINT `indx_0_ibfk_2` FOREIGN KEY (`pid`) REFERENCES `product` (`ID`) …
Run Code Online (Sandbox Code Playgroud)

mysql performance innodb

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

mysql部分索引,反向索引

我有一张包含单词列表的表格.

字VARCHAR(16)

我需要创建一个反向索引.即.单词"apple"将索引为"elppa",单词"banana"作为"ananab"等等.

另外,是否有可能对该词的一部分进行索引?例如,跳过第一个/最后一个或两个字符:

pple(apple)anana(香蕉)

这些事情可能吗?

mysql database indexing

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

mysql唯一索引EXCEPT为空或null

我有一个带有ISBN的MySQL MyISAM表.我想创建一个UNIQUE索引,如果值为空或null,则不会抛出"重复"错误.

这可能吗?

mysql database indexing

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

如何将LARGE sql文件导入mysql表

我有一个PHP脚本解析XML文件并创建一个大型SQL文件,如下所示:

INSERT IGNORE INTO table(field1,field2,field3...)
VALUES ("value1","value2",int1...),
("value1","value2",int1)...etc
Run Code Online (Sandbox Code Playgroud)

这个文件总计超过20GB(我已经在2.5GB文件上测试过,但它也失败了).

我尝试过如下命令:

mysql -u root -p table_name </var/www/bigfile.sql

这适用于较小的文件,比如大约50MB.但它不适用于较大的文件.

我试过了:

mysql> source /var/www/bigfile.sql
Run Code Online (Sandbox Code Playgroud)

我也试过mysqlimport,但是甚至不能正确处理我的文件.

我不断收到错误消息

ERROR 2006 (HY000): MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)

发生约.我开始执行后30秒.

我将allowed_max_packet设置为4GB,但在使用SHOW VARIABLES进行验证时,它只显示1GB.

有没有办法做到这一点而不浪费另外10个小时?

php mysql sql apache mysqlimport

6
推荐指数
1
解决办法
3471
查看次数

使用JavaScript字符串作为函数名?

我需要以下列方式调用函数:

var f = 'fadeOut';
$(v).f(s, function(){
    $(v).css('visibility', 'hidden').css('position', 'absolute');
});
Run Code Online (Sandbox Code Playgroud)

这可以简单吗?

javascript

6
推荐指数
1
解决办法
251
查看次数

mysql innodb vs myisam插入

我有一张1700万行的表.我需要抓取该表的1列并将其全部插入到另一个表中.这是我做的:

INSERT IGNORE INTO table1(name) SELECT name FROM main WHERE ID < 500001
Run Code Online (Sandbox Code Playgroud)

InnoDB大约需要3分45秒

但是,MyISAM仅在4秒内执行.为什么不同?

我看到每个人都赞扬InnoDB但老实说我不知道​​它对我来说有多好.它慢得多.我知道它对于完整性和诸如此类的东西很有用,但我的许多表都不会被更新(只是阅读).我应该打扰InnoDB吗?

mysql myisam innodb

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

MySQL INSERT或SELECT

我有2个表table_a和table_b.

CREATE TABLE `table_a` (
`ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `val` varchar(64) NOT NULL,
 PRIMARY KEY (`ID`),
 UNIQUE KEY `val` (`val`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

CREATE TABLE `table_b` (
 `ref_a` int(11) unsigned NOT NULL,
 `data` int(11) unsigned NOT NULL,
 UNIQUE KEY `unique_index` (`ref_a`,`data`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

我想MASS INSERT到表B中,ref_a值指的是表A的ID.

这就是我想要完成的事情:

SELECT ID FROM table_a WHERE val = "123"
Run Code Online (Sandbox Code Playgroud)

如果该值不存在,则插入该值

INSERT INTO table_a(val) VALUES("123")
Run Code Online (Sandbox Code Playgroud)

现在我得到了ID(假设它是"1"),我想插入table_b:

INSERT INTO table_b(ref_a, data) VALUES(1, 75)
Run Code Online (Sandbox Code Playgroud)

当我想批量进行时,问题出现了.如果我在SELECTS和INSERTS之间交替而不是进行批量插入,那么我的表现是否会下降,然后批量选择?

我可以:

INSERT INTO table_b(ref_a, data) VALUES((SELECT ID …
Run Code Online (Sandbox Code Playgroud)

php mysql

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