我正要写一个包含a的查询WHERE isok=1.顾名思义,isok是一个布尔字段(实际上TINYINT(1) UNSIGNED是根据需要设置为0或1).
索引此字段是否有任何性能提升?引擎(在这种情况下是InnoDB)是否会更好或更差地查找索引?
如果我$table->softDeletes()在迁移中使用,则会向表中添加deleted_at时间戳可为空的列.
从现在开始,我可以得出结论,通过eloquent对该表的任何查询都将带有一个WHERE deleted_at IS NULL子句,确保只返回实时记录.
但我注意到没有为deleted_at创建索引.这个专栏的索引不应该是最重要的吗?
我希望我错过了一些东西.
我的Laravel 5.7网站遇到了一些我认为彼此相关的问题(但在不同时间发生):
PDO::prepare(): MySQL server has gone awayE_WARNING: Error while sending STMT_PREPARE packet. PID=10PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry (我的数据库似乎经常尝试在同一秒内写两次相同的记录.我一直无法弄清楚为什么或如何重现它;它似乎与用户行为无关.)几个月来,我一直看到这些可怕的日志消息,而且我完全无法重现这些错误(并且无法诊断和解决它们).
我还没有发现任何实际症状或听到用户的任何抱怨,但错误消息似乎并非易事,所以我真的想了解并解决根本原因.
我已经尝试更改我的MySQL配置使用max_allowed_packet=300M(而不是默认的4M)但在我有超过几个访问者访问我的网站的日子里仍然经常得到这些例外.
由于这个建议,我还设置了(从5M和10M改为)以下内容:
innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size = 218M
Run Code Online (Sandbox Code Playgroud)
作为进一步背景:
artisan queue:work --sleep=3 --tries=3 --daemon)的队列工作者. mysqlslap查询(虽然我完全是新手)并且即使在模拟数百个并发客户端时也没有发现任何缓慢的问题.SHOW VARIABLES;和SHOW GLOBAL STATUS; 在这里.我my.cnf是:
[mysql]
[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8
innodb_buffer_pool_chunk_size=218M
innodb_buffer_pool_size …Run Code Online (Sandbox Code Playgroud)