ページhttp://www.modoer.org/beijing/item/list-8では、次の2つのSQLが実行されます $this->db->where('s.sid',explode(',', $sids), '');
SELECT s.sid,pid,catid,domain,name, avgsort,sort1,sort2,sort3,sort4,sort5,sort6,sort7,sort8,best,finer,pageviews,reviews,pictures,favorites,thumb,aid,map_lat,map_lng,c_tel,c_dz FROM modoer_subject s LEFT JOIN modoer_subject_shishang sf ON ( s.sid = sf.sid) WHERE が存在します(SELECT 1 FROM modoer_subjectatt st WHERE s.sid=st.sid AND attid=173) AND が存在します(SELECT 1 FROM modoer_subjectatt st WHERE s.sid=st.sid AND attid=4) ORDER BY 詳細な DESC LIMIT 0, 20
SELECT COUNT(*) FROM modoer_subject s WHERE 存在する(SELECT 1 FROM modoer_subjectatt st WHERE s.sid=st.sid AND attid=173) AND 存在する(SELECT 1 FROM modoer_subjectatt st WHERE s.sid=st.sid AND attid=4)
データ量が大きくない場合でも、データ量が多い場合はどうなるでしょうか。私のデータを例にとると、件名データ ボリュームと件名データ ボリュームはそれぞれ、図に示すように
SQL 実行結果になります。
データ ボリュームに対する SQL クエリを 1 回実行するだけで、44.16 秒かかりました。ウェブサイトが完全にダウンしていて開かない場合は、テクノロジーがテストされていない、または最適化されていないのではありませんか?複合文は使うのは楽しいですが、効果は非常に貧弱です
私が一時的に最適化した後、subject_class.php の次のコードを変更したところ、パフォーマンスが大幅に向上しました
if($atts) {
$ attlist = array_values($atts) ; $or = '';
$sql ='select GROUP_CONCAT(sid) sids from( O SELECT COUNT (SID) Count, Sid from (
Modoer_Subjectatt から SID、Attid を選択しますWhere ';
Foreach ($ Attlist as $ Attid) {
// $ this- & gt; where_exist("SELECT 1 FROM dbpre_subjectatt st WHERE s.sid=st.sid AND = $attid");
$ OR = 'OR';
}
$ SQL. = ') SID でグループ化
ここで、カウント ='
sids'];
//$where = ' s.sid in('.$sids.') ';
}else{
$where = '';
}
さらに蟥询数のある地方
if($atts) {
$attlist = array_values($atts);
$num = count($attlist) );
if($num> ;0){
$or = '';
$sql ='select count(*) as nums from(
) select count(sid) count from (
select sid,attid from modoer_subjectatt where ';
foreach($attlist as $attid) {
//$this->db ->where_exist("dbpre_subjectatt st WHERE s.sid=st.sid AND attid=$attid から 1 を選択" );
if($attid
l .= $or . ' attid='.$attid;
$or = ' or ';
}
$ sql .= ') as temp
sid でグループ化) as temp1
where count='.$num;
}
}
希望される友友変更可、也問題のある連絡システムqq 272164179