1

このクエリは機能します..一度に50個のmysqlデータベースをクエリし、最新の10個の結果を返すために機能しますが、各状態のデータベース全体(私の例では4つの状態のみ)をクエリしない方法があります。 10(timeStamp descによる)そしてこのクエリをはるかに効率的にしますか?

$query = "    
SELECT imgURLThumb, timeStamp, title2, state, postId, title
FROM (
  SELECT imgURLThumb,timeStamp, title2, state, postId, title FROM db_washington.md_postings UNION ALL 
  SELECT imgURLThumb,timeStamp, title2, state, postId, title FROM db_westvirginia.md_postings UNION ALL 
  SELECT imgURLThumb,timeStamp, title2, state, postId, title FROM db_wisconsin.md_postings UNION ALL 
  SELECT imgURLThumb,timeStamp, title2, state, postId, title FROM db_wyoming.md_postings 

) allposts where imgURLThumb <> 'images/nopicture.png' order by timeStamp DESC LIMIT 0 , 10";
4

1 に答える 1

1

このクエリをはるかに簡単に記述できるように、すべての投稿が1つのデータベースに含まれるように、データベースを再設計する必要があります。州ごとにデータベースを用意するのは悪い設計のようです。代わりに、すべてのmd_postings投稿に対して単一のテーブルを用意する必要があります。ここで、フィールドの1つはです。State

それが不可能な場合は、トレードオフがあると思います。

  • 簡潔で読みやすいSQLまたは
  • 良好なパフォーマンス。

より良いパフォーマンスが必要な場合は、これを試してください。

SELECT imgURLThumb, timeStamp, title2, state, postId, title
FROM (
    (SELECT imgURLThumb,timeStamp, title2, state, postId, title
    FROM db_washington.md_postings
    WHERE imgURLThumb <> 'images/nopicture.png'
    ORDER BY timeStamp DESC
    LIMIT 10)

    UNION ALL

    (SELECT imgURLThumb,timeStamp, title2, state, postId, title
    FROM db_westvirginia.md_postings
    WHERE imgURLThumb <> 'images/nopicture.png'
    ORDER BY timeStamp DESC
    LIMIT 10)

    UNION ALL

    (SELECT imgURLThumb,timeStamp, title2, state, postId, title
    FROM db_wisconsin.md_postings
    WHERE imgURLThumb <> 'images/nopicture.png'
    ORDER BY timeStamp DESC
    LIMIT 10)

    UNION ALL

    (SELECT imgURLThumb,timeStamp, title2, state, postId, title
    FROM db_wyoming.md_postings
    WHERE imgURLThumb <> 'images/nopicture.png'
    ORDER BY timeStamp DESC
    LIMIT 10)
) AS allposts
WHERE imgURLThumb <> 'images/nopicture.png'
ORDER BY timeStamp DESC LIMIT 10
于 2012-05-24T06:56:37.557 に答える