質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1120閲覧

複数の inner join の表示結果が遅くてerrorになる件について(2)

alkeran

総合スコア29

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/31 10:19

以前に表題の件を質問したのですが、質問の要領を得なかったため詳細を再度。

以下のコードだと、エラーが出るまでに時間がかかって、"Internal Server Error"と表示されます。なぜか phpmyadmin もエラー表示が出るようになりました。どなたかご教授をよろしくお願いいたします。

<?php // データベース情報 $sv = 'localhost'; // サーバー名 $db = 'db_name'; // データベース名 $uid = 'user'; // ユーザー名 $pwd = 'pass'; // パスワード // データベースに接続します try { $db = new PDO('mysql:host='.$sv.'; dbname='.$db, $uid, $pwd); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->exec('SET NAMES utf8'); } catch(PDOException $e) { die('Connection failed: '.$e->getMessage()); } // データを取得します $sth = $db->prepare('SELECT t1.HosoSu , t2.4 ,t2.2,t2.10,t4.count,t3.amount FROM t1 INNER JOIN t2 ON t1.JANCode = t2.3 INNER JOIN t3 ON t1.No = t3.Code INNER JOIN t4 ON t1.JANCode = t4.barcode;'); $sth->execute(); ?> <table> <?php // 商品テーブルと商品分類テーブルから取得したデータを1行ずつ反映します while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { echo '<tr>'; echo '<td>'.$row['2'].'</td>'; echo '<td>'.$row['4'].'</td>'; echo '<td>'.$row['count'].'</td>'; echo '<td>'.$row['amount'].'</td>'; echo '</tr>'; } ?> </table>

各テーブルのCREATE TABLE文は以下の通りです。
t1には5万レコードくらいで、t2~t4にはそれぞれ1000レコード未満のデータがあります。

CREATE TABLE t1 ( `id` varchar(100), `JANCode` varchar(100), `GS1Code` varchar(100), `No` varchar(100), `ShohinMei` varchar(100), `HosoKeitai` varchar(100), `HosoSu` varchar(100), `HosoSuTani` varchar(100), `SeizoKaisya` varchar(100), `HanbaiKaisya varchar(100) ) CREATE TABLE t2 ( `1` varchar(100), `2` varchar(100), `3` varchar(100), `4` varchar(100), `5` varchar(100), `6` varchar(100), `7` varchar(100), `8` varchar(100), `9` varchar(100), `10` varchar(100), `11` varchar(100), ) CREATE TABLE t3 ( `id` varchar(100), `shohinName` varchar(100), `amount` varchar(100), `unit` varchar(100), `teika` varchar(100), `genka` varchar(100), `kingaku` varchar(100), `saekikingaku` varchar(100), `saekiritu` varchar(100), `kosehi` varchar(100), `kosehiritsu` varchar(100), `Code` varchar(100), `shohinCode` varchar(100), ) CREATE TABLE t4 ( `Code` varchar(100), `Name` varchar(100), `count` varchar(100), `standard` varchar(100), `unit` varchar(100), `barcode` varchar(100), `time` varchar(100) )

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

カラムの定義が、何でもかんでも varchar では遅くて当たりまえですね。
コンピュータにとって、文字列と数値ではどちらの方が高速に処理できるか…

インデックスをつけることももちろん大事ですが、文字列+インデックスより数値+インデックスの方が高速に処理できるということは、感覚的に理解できると思います。

投稿2016/09/01 14:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alkeran

2016/09/02 04:32

データ量が多いためではなく、データの処理が煩雑だったためエラーになったのですね。勉強になりました。 本当にありがとうございました。
guest

0

とりあえずexplainで状況を確認してみるところから始めてください
適切なインデックスが必要な気がします

  • t1のHosoSuとJANCodeとNoとJANCodeのインデックス
  • t2の2と3と4と10のインデックス、3はユニーク?
  • t3のCodeとamountのインデックス、Codeはユニーク?
  • t4のbarcodeとcountのインデックス、barcodeはユニーク?

t2~t4の上記がユニークではなく実際に複数データが存在するなら
相乗的にデータ数が増えるのはそういうものです。

投稿2016/08/31 11:08

yambejp

総合スコア114784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alkeran

2016/08/31 11:09

やはりインデックスですか。大量なデータだと必要になるんですよね。 定義していませんでした^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問