我想優化MySql中的視圖。該視圖從表中取0-5條記錄並將它們轉換爲1條記錄。該視圖起作用,但隨着property_log表中記錄數的增加而減慢。優化將多個記錄合併到一個記錄中的mysql視圖
例如,數據看起來像這樣:
mysql> select * from property_log where event_id = 1144882;
+----------+--------------+------------------------------+
| event_id | log_key | log_value |
+----------+--------------+------------------------------+
| 1144882 | userId | 1000 |
| 1144882 | licenseId | 3 |
| 1144882 | messageTypeId| 7 |
| 1144882 | message | Sample message |
| 1144882 | op | tracking |
+----------+--------------+------------------------------+
獲取變成1個記錄:
mysql> select * from view_logged_property where id = 1144882
+---------+--------+-----------+---------------+-------------------+
| ID | UserID | LicenseID | MessageTypeID | Message |
+---------+--------+-----------+---------------+-------------------+
| 1144882 | 1000 | 3 | 7 | Sample message |
+---------+--------+-----------+---------------+-------------------+
編輯:重要提示 - 並非所有5條將是目前所有的時間。例如,數據也可以是這樣的:
mysql> select * from property_log where event_id = 1144882;
+----------+--------------+------------------------------+
| event_id | log_key | log_value |
+----------+--------------+------------------------------+
| 1144882 | userId | 1000 |
| 1144882 | messageTypeId| 7 |
| 1144882 | message | Sample message |
| 1144882 | op | tracking |
+----------+--------------+------------------------------+
我目前使用做到這一點的看法是:
DROP VIEW IF EXISTS view_logged_property;
CREATE VIEW view_logged_property as (
SELECT
p.event_id as ID,
(select log_value from property_log where log_key = "userId" and event_id = p.event_id) as UserID,
(select log_value from property_log where log_key = "licenseId" and event_id = p.event_id) as LicenseID,
(select log_value from property_log where log_key = "messageTypeId" and event_id = p.event_id) as MessageTypeID,
(select log_value from property_log where log_key = "message" and event_id = p.event_id) as Message
FROM
logging_event p
WHERE
p.event_id in (select event_id from property_log where log_key = "op" and log_value = "tracking")
);
什麼是寫這個觀點,因此」最好的辦法即使在「property_log」表中的記錄數增加時,它的表現也會很好嗎?
嘿!我試過這個,它並沒有給我任何數據......但那是因爲我沒有意識到並非所有的記錄都會一直存在(例如,有時只有4條記錄)。我已經添加了對這個問題的澄清! –
@BradParks因此而不是'join'使用['left join'](http://en.wikipedia.org/wiki/Join_%28SQL%29#Left_outer_join),回答正確。 –
優秀!非常感謝......這比我的方法快得多;-) –