小编per*_*lis的帖子

包含blob的表的mysql查询速度取决于文件系统缓存

我有一个大约120k行的表,其中包含一个带有BLOB的字段(每个条目的大小不超过1MB,通常要少得多).我的问题是每当我运行查询询问此表上的任何列(包括BLOB)时,如果文件系统缓存为空,则需要大约40'才能完成.同一个表上的所有后续查询都需要少于1''(从命令行客户端,在服务器本身上进行测试).查询中返回的行数从空集到60k +不等

我已经删除了查询缓存,因此它与它无关.该表是myisam,但我也尝试将其更改为innodb(并设置ROW_FORMAT = COMPACT),但没有任何运气.

如果我删除BLOB列,查询总是很快.

所以我假设服务器从磁盘(或其中的一部分)读取blob,文件系统缓存它们.问题是在流量高且内存有限的服务器上,文件系统缓存每隔一段时间刷新一次,因此这个特定的查询一直给我带来麻烦.

所以我的问题是,有没有办法大幅加快速度,而无需从表中删除blob列?

这里有两个示例查询,一个接一个地运行,以及解释,索引和表定义:

mysql> SELECT ct.score FROM completed_tests ct where ct.status != 'deleted' and ct.status != 'failed' and score < 100;
Empty set (48.21 sec)
mysql> SELECT ct.score FROM completed_tests ct where ct.status != 'deleted' and ct.status != 'failed' and score < 99;
Empty set (1.16 sec)

mysql> explain SELECT ct.score FROM completed_tests ct where ct.status != 'deleted' and ct.status != 'failed' and score < 99;
+----+-------------+-------+-------+---------------+--------+---------+------+-------+-------------+
| id | select_type | …
Run Code Online (Sandbox Code Playgroud)

mysql performance caching blob

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

mysql在MyISAM和InnoDB之间的索引使用差异

我有这些小桌子,item并且category:

CREATE TABLE `item` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(150) NOT NULL,
  `category_id` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`),
  KEY `category_id` (`category_id`)
) CHARSET=utf8

CREATE TABLE `category` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(150) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

我插入了100个类别和1000个项目.

如果我运行这个:

EXPLAIN SELECT item.id,category.name AS category_name FROM item JOIN category ON item.category_id=category.id;
Run Code Online (Sandbox Code Playgroud)

然后,如果表的引擎是InnoDB我得到:

+----+-------------+----------+-------+---------------+-------------+---------+--------------------+------+-------------+
| id | select_type | table    | type …
Run Code Online (Sandbox Code Playgroud)

mysql indexing myisam innodb

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

使用 php 设置子域的 cookie 不起作用

我正在尝试从“example.com”设置一个 cookie,以便只能由“site.example.com”访问。问题是由于某种原因这不起作用。例如,下面的代码可以正确运行:

setcookie('my_var', "hello", time()+3600, "/", 'example.com');
Run Code Online (Sandbox Code Playgroud)

也就是说,当从 example.com 运行时,我可以从 site.example.com 看到“my_var”cookie。然而,下面的代码没有设置cookie:

setcookie('my_var', "hello", time()+3600, "/", 'site.example.com');
Run Code Online (Sandbox Code Playgroud)

(如果我在前面加上一个点,例如“.site.example.com”,也不会)

使用 php 5.3.8 和 Chromium

php cookies

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

mysql查询起先慢后快

我有2个myISAM表,分别称为“测试”和“ completed_tests”,一个表有170个条目,另一个表有118k条目。当我运行此查询时:

SELECT ct.archive, ct.status, ct.score, ct.users_LOGIN, t.lessons_ID, t.content_ID, t.keep_best 
 FROM completed_tests ct,tests t 
WHERE ct.status != 'deleted' and ct.status != 'incomplete' and t.id=ct.tests_ID and t.lessons_ID=10;
Run Code Online (Sandbox Code Playgroud)

然后大约需要30秒才能完成。随后对同一查询或相关查询的调用(例如,不同的lessons_ID)更快。即使我重置查询缓存或重新启动mysql服务器,它们仍然保持更快的速度。我想这意味着表被缓存到内存中(并留在那里)。我的问题是,该特定查询似乎在运行此应用程序的高流量站点上引起了问题(我想这是因为服务器的内存不足并清空了其缓存?)。我的问题是:

  • 有没有办法在我的系统上一致地复制30英寸的延迟,所以我可以尝试优化查询?例如,是否应该清空系统的缓存?
  • 有没有一种方法可以优化上面的查询?运行解释会给出:

运行说明给出:

mysql> explain SELECT ct.archive, ct.status, ct.score, ct.users_LOGIN, t.lessons_ID, t.content_ID, t.keep_best FROM completed_tests ct,tests t WHERE ct.status != 'deleted' and ct.status != 'incomplete' and t.id=ct.tests_ID and t.lessons_ID=10;
+----+-------------+-------+------+-----------------+----------+---------+---------------+------+-------------+
| id | select_type | table | type | possible_keys   | key      | key_len | ref           | rows | Extra       | …
Run Code Online (Sandbox Code Playgroud)

mysql performance

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

git维护同一个项目的2个版本,每个版本都有不同的用户

我在github有一个(私人)项目,开发人员团队在这里进行更改.客户现在要求在他们自己的系统副本上开发一些繁重的自定义.一个新团队将在这个项目上工作,但我不希望这个团队有权访问原始存储库.所以我在github上创建了一个新的存储库,并使用原始项目中的代码对其进行初始化.

但是,我仍然希望第二个项目能够在原始项目上完成更新.如何设置存储库以满足此需求?

或者,如果我要保留一个项目,是否有办法让新团队只访问其中的特定分支?

git github

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

Javascript解码包含编码字符串的JSON字符串

我有以下PHP代码:

    $foo = new stdClass();
    $foo->test='hello world';
    $bar = new stdClass();
    $bar->foo = json_encode($foo);
    $encoded_string = json_encode($bar);
Run Code Online (Sandbox Code Playgroud)

$encoded_string包含:

{"foo":"{\"test\":\"hello world\"}"}
Run Code Online (Sandbox Code Playgroud)

我想从javascript解析此字符串($.parseJSON例如使用jQuery ):

var data = $.parseJSON('{"foo":"{\"test\":\"hello world\"}"}');
console.log(data);
Run Code Online (Sandbox Code Playgroud)

我希望记录以下内容:

Object {foo: '{"test":"hello world"}'}
Run Code Online (Sandbox Code Playgroud)

但是Unexpected token t运行它时出现错误(使用铬)

如何在Javascript中解析此json字符串?如果有人想尝试,这是一个小提琴

javascript php jquery json escaping

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

PHP APC在win64中"模拟"

我在Windows Server 2008环境中安装了apache 2.4.4,php 5.4.17.我使用了http://www.apachelounge.com/viewtopic.php?p=25084上的二进制文件

这些二进制文件包括APC as apcu.dll.加载时,在[APC]下的phpinfo中,它说:

APC support: Emulated

有人知道这在实践中意味着什么吗?与标准APC相比是否会有任何差异?(为此,btw,似乎不存在此设置的工作二进制文件)

php apc x86-64

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

chrome/safari问题:<p>包含2个隐藏的<span>,每个<span>包含一个<div>,但显示的是第1个

以下代码片段在FF/IE中运行正常(没有显示任何内容),但在chrome/safari中,显示第1个跨度!

<p>
    <span style = "display:none"><div>inner</div></span>
    <span style = "display:none"><div>inner</div></span>
</p>
Run Code Online (Sandbox Code Playgroud)

谁有解释?

html safari google-chrome

0
推荐指数
1
解决办法
695
查看次数