0
我有一個叫wallcitiescouncils視圖,從這個視圖返回值的過程。 我需要更快的respose,因此我想將此視圖更改爲Select語句,但目前沒有成功。更改MySQL視圖中的select語句
我需要的結果形成了兩個表,城市和議會,這是我的看法代碼:
CREATE OR REPLACE VIEW wallcitiescouncils AS
SELECT
concat('p',cities.id) as id,
cities.name as name,
cities.country_id,
concat(cities.name,' (',councils.name,'), ',states.name,', ',countries.name) as fullname,
'City' as type
FROM cities
JOIN countries ON (cities.country_id = countries.id)
JOIN states ON (cities.state_id = states.id)
JOIN councils ON (cities.council_id = councils.id)
UNION ALL
SELECT
concat('c',councils.id) as id,
councils.name as name,
councils.country_id,
concat(councils.name,'(Council)') as fullname,
'Council' as type
FROM councils
而這一次我的程序:
BEGIN
SELECT name as city, id as city_id, fullname
FROM wallcitiescouncils
WHERE country_id = _country_id AND name LIKE CONCAT(search , '%') ORDER BY name LIMIT _limit;
END
我需要改變FROM wallcitiescouncils
SELECT語句所以我不必調用視圖。
這是我的一個嘗試,但結果不正確(我沒有理事會的結果,並在'全名'總是得到相同的理事會名稱),我使用councils_id(只存在於城市表)嘗試知道,如果是一個城市或一個城市coucil:
SELECT
if(
cities.council_id is null,
concat('c',councils.id),
concat('p',cities.id)
) as id,
if(
cities.council_id is null,
councils.name,
cities.name
) as name,
if(
cities.council_id is null,
councils.country_id,
cities.country_id
) as country_id,
if(
cities.council_id is null,
concat(councils.name,' (Municipio)'),
concat(cities.name,' (',councils.name,'), ',states.name,', ',countries.name)
) as fullname
FROM councils, cities
JOIN countries ON (country_id = countries.id)
JOIN states ON (state_id = states.id)
/*JOIN councils ON (cities.council_id = councils.id)*/
where cities.id = 1 or councils.id = 1 limit 200
爲什麼你認爲改變視圖爲select語句會做什麼工作得更快?你的查詢中有一個'LIKE',你沒有發佈'EXPLAIN'的輸出,所以你是如何得出瓶頸在哪裏的? – Mjh
[MySQL視圖作爲性能麻煩製造者(https://www.percona.com/blog/2007/08/12/mysql-view-as-performance-troublemaker/) – Devart
@Devart你連接一個10歲的文章。有一種確定MySQL瓶頸的標準方法,每個問題都會重複一遍。讓我們這樣做,並獲得正確的信息,而不是猜測。 – Mjh