MySQLを用いてカウンターを作っているのですが、行が出てくる時と出てこない時があって困っています。
MySQL
1-- 2-- テーブルの構造 `counter` 3-- 4 5CREATE TABLE IF NOT EXISTS `counter` ( 6 `page_id` varchar(11) NOT NULL, 7 `count` int(11) NOT NULL 8) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 9 10-- 11-- Indexes for table `counter` 12-- 13ALTER TABLE `counter` 14 ADD PRIMARY KEY (`page_id`), 15 ADD KEY `page_id` (`page_id`); 16 17
page_idはpもしくはiに番号という形式で、countにカウントされた数を入れています。
行数が500万行ぐらいあります。
PHP
1$page_id ="p123"; 2 3require_once("./common/mysql.counter.php"); 4$sql = "SELECT * FROM `counter` WHERE `page_id`LIKE :page_id"; 5$st = $cpdo->prepare($sql); 6$st->bindValue(':page_id', $page_id); 7$st->execute(); 8$counter = $st->fetch(); 9 10$erlog = $st->errorInfo(); 11echo "<!--"; 12var_dump($erlog); 13echo "-->"; 14
$counterが空っぽの時のerrorInfoはこの状態です。
array(3) {
[0]=>
string(5) "00000"
[1]=>
NULL
[2]=>
NULL
}
そもそも主キーを英数字混じりのvarcharにしているのが良くないのでは?と思い、一度mysqldumpした後、主キーを数字のみに変え、データ型もvarcharからintに変えて本番環境にリストアしたところ、INSERTが異様に重くなり使いものにならなくなってやむなく戻しました。インデックスの貼り方に問題があったのでしょうか?
$counterが空になる原因の調べ方と、重くならないようにする方法についてお知恵拝借できれば幸いです。
PHP 7.1.18、MySQL5.6.44 InnoDBです。
回答2件
あなたの回答
tips
プレビュー