ホームページ >バックエンド開発 >PHPチュートリアル >MYSQL のクエリ速度が非常に遅いです。テーブル構造に問題がありますか?

MYSQL のクエリ速度が非常に遅いです。テーブル構造に問題がありますか?

WBOY
WBOYオリジナル
2016-06-23 14:24:39945ブラウズ

テーブル 1 は新しいテーブルです:
CREATE TABLE IF NOT EXISTS `book` (
`bid` int(6) unsigned NOT NULL AUTO_INCREMENT,
`siteid` smallint(2) NOT NULL DEFAULT '0'、マルチサイト ID
`catid` smallint(6) NOT NULL、列 ID
`title` char(80) NOT NULL、タイトル
`words` char(20) NOT NULL DEFAULT '0'、単語数
`content` テキスト NOT NULL、はじめに
`inputtime` int(11) NOT NULL、エントリ時間
`updatetime` int(11) NOT NULL、更新時間
`username` varchar(40) NOT NULL、ユーザー名
`author` varchar(100) NOT NULL、著者
`letter` char(5) NOT NULL、頭文字
`thumb` varchar(200) NOT NULL、サムネイル
`url` varchar(200) NOT NULL、静的アドレス
`keywords` varchar(200) NOT NULL 、キーワード
`passed` tinyint(1) NOT NULL DEFAULT '0'、シリアル化ステータス
`status` tinyint(2) NOT NULL DEFAULT '99'、レビュー
`posid` tinyint(1) NOT NULL DEFAULT '0'、推奨ID
PRIMARY KEY (`bid`),
KEY `siteid` (`siteid`,`passed`,`catid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

テーブル 2、章テーブル
CREATE TABLE IF NOT EXISTS `book_capital` (
`cid` int(8) unsigned NOT NULL AUTO_INCREMENT,
`bid` int(6) unsigned NOT NULL、書籍 ID
`listorder` int(8) NOT NULL DEFAULT '0'、sort
` title` varchar(180) NOT NULL、章タイトル
`content` text NOT NULL、章コンテンツ
`updatetime` int(11) NOT NULL、更新時間
`url` varchar(200) NOT NULL、章アドレス
主キー(`cid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=38065;


クエリ速度が非常に遅いので、専門家に問い合わせてください。間違っています。



ディスカッションへの返信 (解決策)

SQL コマンドの問題

public function lists($data) {

$siteid = $data['siteid'] intval($data['siteid']) ? : get_siteid();
$catid = intval($data['catid']);
$passed = $data['passed']==''?":$data['passed']; posid = intval($data['posid']);
$catidin = $data['catidin']
//エコー $data['レター']
//エコー ord($data['レター']; );
if(ord($data['letter'])>60){
$letter=$data['letter']
}
//$letter = $data['letter']==0 ?"":$data['letter'];
if(isset($data['where'])) {$sql = " and ".$data['where'];}
$thumb = intval($ data['thumb']) " AND サム != ''" : '';
if ($siteid) $where .= " `siteid`='".$siteid."'"; ==0 または $passed==1) $where .= " および `passed`='".$passed."'";
if ($posid) $where .= " および `posid`='".$ posid."'";
if ($catidin) $where .= " および catid in('".$catidin."')"
if ($catid) $where .= " および `catid`='" .$catid."'";
if ($letter) $where .= " および `letter`='".$letter."'";
$where .= ' AND `status`='99''。 $sql.$thumb;
$order = $data['order'];
return $this->db->select($where, '*', $data['limit'], $order);
}


これはクエリのラベル コードですが、ここに問題がありますか。

問題がある場合は、完全なクエリ コマンドを確認する必要があります

最初のクエリはホット コンテンツ クエリで、クリック テーブルに関連付けられたクエリ コマンドです:
select a.bid,a.title,a.author,a.content,a.updatetime,a.catid,a.url 、a. posid、b.bid,b.hits 、b.hits from book a,book_hits b where a.bid=b.bid および a.posid=2 ヒット数順に並べる desc LIMIT 1

テーブルをクリックします:
CREATE TABLE存在しない場合 `book_hits` (
`catid` int(6) NOT NULL、
`bid` int(6) unsigned NOT NULL、
`hits` int(6) NOT NULL DEFAULT '0'、
`day` int (6) DEFAULT '0'、
`week` int(6) DEFAULT '0'、
`month` int(6) DEFAULT '0'、
`updatetime` int(11) NOT NULL、
PRIMARY KEY (` bid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


2 つ目は単一のテーブル クエリです: select * from book where `siteid`='1' and `posid`='1' and `catid`= '22' AND `status`='99' AND親指 != '' order by bid desclimit 0,10

ページ全体にはこれら 2 つのクエリのみが含まれています。ホームページを開くのに約 20 秒かかります。

量が多いですよね?

クエリ エンジンで、クエリ ステートメントの前に Explain を追加します
たとえば、
EXPLAIN select * from user where user='999'
詳細な説明については、これを参照してください
http://www.blogjava.net/永続化/アーカイブ/2008 +

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。