【发布时间】:2016-03-04 02:55:14
【问题描述】:
我经常使用 Yii2,但通常使用 MySQL。这是我第一次将它与 Oracle 一起使用。我发现性能很差。我做了一些谷歌搜索,发现虽然使用 Yii2 + Oracle 似乎并不常见,但似乎有人说它很慢。
我想知道可以采用哪些建议/提示/流程/包来提高性能?
我正在加载一张非常小的桌子。它有 8 行,整个表有 4 列。它们是使用 6.4MB 数据的 27 个数据库调用,运行大约需要 3 秒。查看日志我看到了很多我不太了解的内容:
SELECT D.CONSTRAINT_NAME, D.CONSTRAINT_TYPE, C.COLUMN_NAME, C.POSITION, D.R_CONSTRAINT_NAME, E.TABLE_NAME AS TABLE_REF, F.COLUMN_NAME AS COLUMN_REF, C.TABLE_NAME
FROM
ALL_CONS_COLUMNS C
INNER JOIN ALL_CONSTRAINTS D ON D.OWNER = C.OWNER AND D.CONSTRAINT_NAME = C.CONSTRAINT_NAME
LEFT JOIN ALL_CONSTRAINTS E ON E.OWNER = D.R_OWNER AND E.CONSTRAINT_NAME = D.R_CONSTRAINT_NAME
LEFT JOIN ALL_CONS_COLUMNS F ON F.OWNER = E.OWNER AND F.CONSTRAINT_NAME = E.CONSTRAINT_NAME AND F.POSITION = C.POSITION
和
SELECT a.column_name, a.data_type, a.data_precision, a.data_scale, a.data_length,
a.nullable, a.data_default,
( SELECT D.constraint_type
FROM ALL_CONS_COLUMNS C
inner join ALL_constraints D on D.OWNER = C.OWNER and D.constraint_name = C.constraint_name
WHERE C.OWNER = B.OWNER
and C.table_name = B.object_name
and C.column_name = A.column_name
and D.constraint_type = 'P') as Key,
com.comments as column_comment
FROM ALL_TAB_COLUMNS A
inner join ALL_OBJECTS B ON b.owner = a.owner and ltrim(B.OBJECT_NAME) = ltrim(A.TABLE_NAME)
LEFT JOIN all_col_comments com ON (A.owner = com.owner AND A.table_name = com.table_name AND A.column_name = com.column_name)
然后是关于触发器的更多内容。
当我尝试使用诸如
之类的关系时,我也会遇到错误Model::find()->with('relationName')->all();
我明白了
'ORA-01795: maximum number of expressions in a list is 1000 error。
这些表总共有大约 17k 行。一个表中大约有 11k 条,另一张表中有大约 7k 条链接。
我使用 fk 约束作为表中的引用。
【问题讨论】:
-
上述查询请求有关您的数据库架构的信息。我从来没有用过 yii2,也不知道它为什么需要这些信息。
标签: performance oracle11g yii2