mysql视图慢,MySql视图非常慢。为什么?

My normal query:

SELECT

DISTINCT vt.id as id,

vtt.name as n,

vt.etxid as etx

FROM vt

LEFT JOIN vtt ON

(vtt.locale = "etx"

AND vtt.etxid = vt.etxid)

Execution time: 5ms

My view:

CREATE OR REPLACE VIEW myview AS

SELECT

DISTINCT vt.id as id,

vtt.name as n,

vt.etxid as etx

FROM vt

LEFT JOIN vtt ON

(vtt.locale = "etx"

AND vtt.etxid = vt.etxid)

My view query:

SELECT * from myview;

Execution time: 600ms

解决方案

As soon as you mention DISTINCT or aggregation functions in a view MySQL selects TEMPTABLE algorithm for this view, and it means it will create a temporary table for the view and then apply sorting, grouping, and aggregations to it. See more details here. Also, there are some recommendations here concerning view performance.

My normal query: SELECT DISTINCT vt.id as id, vtt.name as n, vt.etxid as etx FROM vt LEFT JOIN vtt ON (vtt.locale = "etx" AND vtt.etxid = vt.etxid) Execution time: 5ms My view: CREATE OR REPLACE VIEW myview AS SELECT DISTINCT vt.id as id, vtt.name as n, vt.etxid as etx FROM vt LEFT JOIN vtt ON (vtt.locale = "etx" AND vtt.etxid = vt.etxid) My view query: SELECT * from myview; Execution time: 600ms 解决方案 As soon as you mention DISTINCT or aggregation functions in a view MySQL selects TEMPTABLE algorithm for this view, and it means it will create a temporary table for the view and then apply sorting, grouping, and aggregations to it. See more details here. Also, there are some recommendations here concerning view performance.
经验分享 程序员 微信小程序 职场和发展