1

一時テーブルなしで mysql からタグ クラウドを作成する他の方法はありますか?

mysql> wallpaper_keywords について説明します。
+--------------+-----------------------+------+--- --+---------+----------------+
| | フィールド | フィールド タイプ | ヌル | キー | キー | デフォルト | エクストラ |
+--------------+-----------------------+------+--- --+---------+----------------+
| | ID | mediumint(7) 符号なし | いいえ | PRI | ヌル | auto_increment |
| | wallpaper_id | mediumint(7) 符号なし | はい | マル | ヌル | | |
| | キーワード ID | smallint(5) 符号なし | はい | マル | ヌル | | |
+--------------+-----------------------+------+--- --+---------+----------------+

mysql> キーワードを説明します。
+---------+-----------------------+------+-----+-- -------+----------------+
| | フィールド | フィールド タイプ | ヌル | キー | キー | デフォルト | エクストラ |
+---------+-----------------------+------+-----+-- -------+----------------+
| | ID | mediumint(7) 符号なし | いいえ | PRI | ヌル | auto_increment |
| | キーワード | varchar(32) | はい | ユニ | ヌル | | |
+---------+-----------------------+------+-----+-- -------+----------------+

SELECT k.keyword,count(k.keyword) AS count FROM keywords k Left Join wallpaper_keywords wk ON wk.keyword_id = k.id GROUP BY wk.keyword_id, k.keyword ORDER BY count DESC limit 100;

+----------+-------+
| | キーワード | カウント |
+----------+-------+
| | コンピューター | 10 |
| | 道路 | 4 |
| | ツリー | 4 |
| | ウィンドウ | 4 |
| | 自然 | 4 |
| | 森 | 3 |
| | 車 | 3 |
| | マツダ | 3 |
| | アブストラクト | 3 |
| | 面白い | 3 |
| | スポーツ | 3 |
| | 海 | 海 | 3 |
| | 都市 | 3 |
| | 戦士 | 2 |
| | 鳥 | 2 |
| | ライト | 1 |
| | 夏 | 夏 | 1 |
| | スペース | 1 |
| | 夕暮れ | 1 |
| | Ubuntu | 1 |
+----------+-------+

説明:

+----+-------------+--------------------+-------+- --------------+---------+---------+------+------+- ----------------------------------------------+
| | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ |
+----+-------------+--------------------+-------+- --------------+---------+---------+------+------+- ----------------------------------------------+
| | 1 | プライマリ | キーワード | インデックス | ヌル | キーワード | 99 | ヌル | 20 | インデックスの使用; 一時的な使用; ファイルソートの使用 |
| | 1 | プライマリ | | | すべて | ヌル | ヌル | ヌル | ヌル | 54 | | |
| | 2 | 派生 | 壁紙_キーワード | インデックス | ヌル | プライマリ | 3 | ヌル | 54 | | |
+----+-------------+--------------------+-------+- --------------+---------+---------+------+------+- ----------------------------------------------+
3 行セット (0.00 秒)

別のクエリ を編集します。SELECT count,k.keyword from (SELECT * , count(wk.keyword_id) AS count FROM wallpaper_keywords wk GROUP BY wk.keyword_id LIMIT 50000) as data left join keywords as k on k.id = data.keyword_id order by count desc limit 500

+----+-------------+------------+--------+-------- -------+------------+---------------------+-----------------+- ---+----------------+
| | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ |
+----+-------------+------------+--------+-------- -------+------------+---------------------+-----------------+- ---+----------------+
| | 1 | プライマリ | | | すべて | ヌル | ヌル | ヌル | ヌル | 20 | ファイルソートの使用 |
| | 1 | プライマリ | k | eq_ref | プライマリ | プライマリ | 3 | data.keyword_id | 1 | | |
| | 2 | 派生 | 週 | インデックス | ヌル | キーワード ID | 3 | ヌル | 59 | | |
+----+-------------+------------+--------+-------- -------+------------+---------------------+-----------------+- ---+----------------+

問題は今でしょう - より良い解決策はありますか? より安い (SHOW STATUS LIKE 'last_query_cost';) それを数える方法は?

4

1 に答える 1

4

すべてのキーワードの合計値をカウントするには、テーブルのキーワードで追加のフィールド (total_count) を使用し、新しいキーワードを追加するたびにこのフィールドに +1 を追加します。将来、100,000 のレコードを持つようになると、データベースにとって非常に簡単になります。

于 2012-11-13T14:03:20.277 に答える