CREATE TABLE 属性 (
ID VARCHAR(40)、
タイプ VARCHAR(16)、
データ VARCHAR(2048)、
PRIMARY KEY(id,タイプ)
);
これは、実行しようとしているクエリの一般的な形式です。一般的な考え方は、「オブジェクト」には一意の ID があり、JavaScript オブジェクトのようにキーと値のペアがあるというものです。
SELECT a1.id、a1.data、a2.data、a3.data、a4.data、a6.data
FROM 属性 a1、属性 a2、属性 a3、属性 a4、属性 a5
LEFT JOIN 属性 a6 ON (a6.id=a5.id AND a6.type = 'Foreign Id')
WHERE a1.id=a2.id
AND a1.id=a3.id
AND a1.id=a4.id
AND a1.id=a5.id
AND a1.type = '名'
AND a2.type = 'ミドルネーム'
AND a3.type = '姓'
AND a4.type = 'タイムスタンプ'
AND a5.type = 'Count'
AND a5.data = 'MY_ID'
このクエリ'Foreign Id'では、オプションの属性です。問題は、私が得ていることです
SELECT は MAX_JOIN_SIZE を超える行を調べます。WHERE を確認し、SELECT が問題ない場合は SET SQL_BIG_SELECTS=1 または SET MAX_JOIN_SIZE=# を使用します。
言われたとおりにできることはわかっていますが、警告は、このクエリがひどく非効率的であることを心配しています。クエリを作成するより良い方法はありますか?