我有一个小的(100 行,5 列)表格,它完整显示用于控制面板功能。使用 IntelliJ 测试开发时,响应初始请求,但一直没有执行完毕,因此也不会提供任何内容。如果我将 PHP 文件部署到我的本地 Web 服务器,它会毫不犹豫地提供相同的内容。有时,当我加载不使用数据库访问的控制面板部分时,它加载得很好(尽管很慢)。我已经在我的 cli/php.ini 中提高了请求允许的最大内存,并且还增加了 IntelliJ 可用的内存。我的idea64.vmoptions如下:
-Xms128m
-Xmx3G
-XX:MaxPermSize=750m
-XX:ReservedCodeCacheSize=200m
-ea
-Dsun.io.useCanonCaches=false
-Djava.net.preferIPv4Stack=true
-Djsse.enableSNIExtension=false
-XX:+UseCodeCacheFlushing
-XX:+UseConcMarkSweepGC
-XX:SoftRefLRUPolicyMSPerMB=50
-Dawt.useSystemAAFontSettings=lcd
如果我转储表,它会再次加载页面,所以我假设问题与 IntelliJ 允许 php 使用多少内存有关,但我对要查找的内容感到很困惑。据我所知,该表唯一的特别之处在于它使用了一个非常大的主键列。表结构如下:
CREATE TABLE IF NOT EXISTS `links` (
`url` VARCHAR(767) NOT NULL,
`link_group` INT(10) UNSIGNED NOT NULL,
`isActive` TINYINT(1) NOT NULL DEFAULT '1',
`hammer` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`url`),
KEY `group` (`link_group`)
)
ENGINE =InnoDB
DEFAULT CHARSET =utf8mb4,
ROW_FORMAT = COMPRESSED;
行格式被压缩以允许所述大主键。解决不了怎么办,找原因?
我尝试遵循 Peter 的建议,但无济于事。我开始认为这可能只是 IntelliJ 无法正确地为我提供 PHP 服务。新表结构如下:
CREATE TABLE IF NOT EXISTS `links` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(767) NOT NULL,
`link_group` int(10) unsigned NOT NULL,
`isActive` tinyint(1) NOT NULL DEFAULT '1',
`hammer` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `url` (`url`),
KEY `group` (`link_group`),
FULLTEXT KEY `url_2` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED AUTO_INCREMENT=1 ;
需要说明的是,MySQL 的性能似乎还不错。 SELECT * FROM 链接在 0.0005 秒内执行。
最佳答案
您可能想要重新创建该表。您的表定义可能会导致不可预测的行为。
尝试为 url
字段使用 TEXT
数据类型。此外,将其用作 PRIMARY 键并不好笑。使用 id
字段作为主键,然后将 unique index
添加到 url
字段(如果需要)。
关于PHP 停止响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25184793/