0

このクエリは機能していますが、非常に遅いです。

私はこのクエリで欲しい: 1 つのランダム(id,word,meaning)と 1 つのランダムに間違った別の単語の意味。クエリのパフォーマンスを向上させるにはどうすればよいですか?

$offset_result = mysql_query("SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM words WHERE APPROVAL=1 AND PERIOD<".$_SESSION['statistics']['d']." OR ( PERIOD=".$_SESSION['statistics']['d']."  AND WEEK<=".$_SESSION['statistics']['h'].")");
    $offset_row = mysql_fetch_object($offset_result);
    $offset = $offset_row->offset;  
    $words = mysql_query("SELECT ID,WORD,MEANING,
    (SELECT MEANING FROM words WHERE ID!=w.ID AND APPROVAL=1 AND WORD!=w.WORD AND NOT FIND_IN_SET(w.MEANING, OTHER_MEANING) AND ID >= (SELECT FLOOR( MAX(ID) * RAND()) FROM words) ORDER BY ID LIMIT 1) AS INCORRECT 
    FROM words w 
    LIMIT $offset, 1");

テーブルレイアウトはこちら

CREATE TABLE words (
    ID int(11) NOT NULL AUTO_INCREMENT,
    APPROVAL tinyint(1) NOT NULL DEFAULT '1',
    WORD varchar(255) COLLATE utf8_turkish_ci NOT NULL,
    MEANING varchar(255) COLLATE utf8_turkish_ci NOT NULL,
    OTHER_MEANING varchar(255) COLLATE utf8_turkish_ci NOT NULL,
    PERIOD tinyint(1) NOT NULL,
    WEEK tinyint(2) NOT NULL,
    PRIMARY KEY (ID),
    KEY APPROVAL (APPROVAL) ) 
    ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=769 ;
4

1 に答える 1