Jam*_*oni 8 mysql sql database mysql-slow-query-log
这是查询统一医学语言系统(UMLS)以查找与标准化单词相关的单词.这个查询结果是165MS,但如果我正在运行同一个查询的VIEW,则需要70秒.我是mysql的新手.请帮我.
查询:
SELECT a.nwd as Normalized_Word,
b.str as String,
c.def as Defination,
d.sty as Semantic_type
FROM mrxnw_eng a, mrconso b, mrdef c, mrsty d
WHERE a.nwd = 'cold'
AND b.sab = 'Msh'
AND a.cui = b.cui
AND a.cui = c.cui
AND a.cui = d.cui
AND a.lui = b.lui
AND b.sui = a.sui
group by a.cui
Run Code Online (Sandbox Code Playgroud)
查看定义:
create view nString_Sementic as
SELECT a.nwd as Normalized_Word,
b.str as String,
c.def as Defination,
d.sty as Semantic_type
FROM mrxnw_eng a, mrconso b, mrdef c, mrsty d
WHERE b.sab = 'Msh'
AND a.cui = b.cui
AND a.cui = c.cui
AND a.cui = d.cui
AND a.lui = b.lui
AND b.sui = a.sui
group by a.cui
Run Code Online (Sandbox Code Playgroud)
从视图中选择:
select * nString_Sementic
where nwd = 'phobia'
Run Code Online (Sandbox Code Playgroud)
Ald*_* W. 10
通过将VIEW ALGORITHM指定为MERGE,您可以获得更好的性能.使用MERGE MySQL将视图与外部SELECT的WHERE语句结合起来,然后提出优化的执行计划.
但要执行此操作,您必须从VIEW中删除GROUP BY语句. 实际上,如果您的视图中包含GROUP BY语句,MySQL将选择TEMPLATE算法.在由WHERE语句过滤之前,首先要创建整个视图的临时表.
如果不能使用MERGE算法,则必须使用临时表.如果视图包含以下任何构造,则不能使用MERGE:
聚合函数(SUM(),MIN(),MAX(),COUNT()等)
不同
通过...分组
HAVING
限制
UNION或UNION ALL
选择列表中的子查询
仅指文字值(在这种情况下,没有基础表)
这是更多信息的链接.http://dev.mysql.com/doc/refman/5.0/en/view-algorithms.html
如果您可以将视图更改为不包含GROUP BY语句,则要指定视图的算法,语法为:
CREATE ALGORITHM = MERGE VIEW...
Run Code Online (Sandbox Code Playgroud)