タグ付けされた質問 「functions」

関数は指定された作業を実行し、通常はパラメーターを入力として受け取ります。データベースに関しては、これらはSQLまたはデータベースベンダーに固有の場合があります。

1
関数のボラティリティを宣言して、パフォーマンスに悪影響を与えることはできますか?
Postgresの機能を使用して宣言されている揮発性の分類VOLATILE、STABLEまたはIMMUTABLE。プロジェクトは、組み込み関数のこれらのラベルで非常に厳しいことが知られています。そして正当な理由があります。顕著な例:式のインデックスはIMMUTABLE関数のみを許可し、誤った結果を回避するためにそれらは真に不変でなければなりません。 ユーザー定義関数は、所有者の選択に従って自由に宣言できます。マニュアルは助言します: 最適化の最良の結果を得るには、関数に有効な最も厳密なボラティリティカテゴリで関数にラベルを付けてください。 ...そして、不適切なボラティリティラベルで問題が発生する可能性のあるものの広範なリストを追加します。 それでも、不変性を偽ることが理にかなっている場合があります。あなたがするとき、ほとんど知っている機能は、実際には、あなたの範囲内で不変です。例: PostgreSQLは「アクセントを区別しない」照合をサポートしていますか? データの整合性に関する考えられるすべての影響はさておき、パフォーマンスへの影響は何ですか?関数の宣言はパフォーマンスにのみ有益であると考える人もいるかもしれません。そうですか?IMMUTABLE 関数のボラティリティIMMUTABLE を宣言するとパフォーマンスが低下しますか? 現在のPostgres 10でそれを絞り込むと仮定しますが、最近のすべてのバージョンが対象です。

1
Postgres:パラメータ付きのpsql関数に存在する場合は切り捨て
存在する場合、指定されたテーブル名を切り捨てるpsql関数を取得しようとしています。私は複数の機能を試してきましたが、どれも今のところ機能していません。ここにコードがあります: CREATE OR REPLACE FUNCTION truncateIfExists(tableName TEXT) returns void as $$ BEGIN EXECUTE format( 'IF EXISTS ( SELECT * FROM information_schema.tables WHERE table_name =' || tableName || ' ) THEN TRUNCATE tableName; END IF; '); END; $$language plpgsql これで、名前を固定した簡単な手順で機能させることができます。 do $$ begin IF EXISTS (SELECT * FROM information_schema.tables WHERE table_name …

3
インラインTVFとビューのパフォーマンス
ビューの代わりにインラインTVF(テーブル値関数)を使用しているデータベースがあります。たとえば、TVF [fnCarBrands]内で結合している[車のモデル]と[車のメーカー]という2つのテーブルがあるとします。 これらのTVFは他のTVFから呼び出され、さらに処理とレポートを行います。したがって、関数[fnCarBrands]を受け取り、テーブル[購入年]に結合して、関数[fnCarBrandHistory]を作成します。TVFのいくつかの層についても同様です。 インラインTVFは実際にはテーブルと他のTVFの単なる結合なので、おそらくビューを使用して同じ機能を取得できます。 このように記述されたインラインTVFのパフォーマンスは、ビューとどのように比較されますか?

1
SQL Server関数をオーバーロードすることは可能ですか?
SQLサーバー関数をオーバーロードすることは可能ですか?ltrimのようなスカラー、またはcountのような集約関数のどちらですか? これが本当に、本当に、悪い考えだったとしても。出来ますか? T-SQLのユーザー定義関数のオーバーロードの複製のいくらか?それは2005年のバージョンだったので、それは100%複製ではないと言えるでしょう。多分これは変わったのですか?

1
FROM句でSet Returning Function(SRF)の実行が遅くなるのはなぜですか?
これはデータベース内部の質問です。私はPostgreSQL 9.5を使用FROMしています。たとえば、これらのコマンドを実行するときのように、句の中でSet Returning Functions(SRF)(テーブル値関数(TVF)とも呼ばれます)の実行速度が低下するのはなぜですか。 CREATE TABLE foo AS SELECT * FROM generate_series(1,1e7); SELECT 10000000 Time: 5573.574 ms それはだ常に、より実質的に遅いです CREATE TABLE foo AS SELECT generate_series(1,1e7); SELECT 10000000 Time: 4622.567 ms ここで作成できる一般的なルールはありますか?たとえば、節の外で常に Set-Returning関数を実行する必要がありFROMますか?

4
クエリの複数の列で同じテーブル値関数を呼び出す最も効率的な方法
同じテーブル値関数(TVF)が20列で呼び出されるクエリを調整しようとしています。 最初に行ったのは、スカラー関数をインラインテーブル値関数に変換することでした。 CROSS APPLYクエリの複数の列で同じ関数を実行するために最高のパフォーマンスを発揮する方法を使用していますか? 単純な例: SELECT Col1 = A.val ,Col2 = B.val ,Col3 = C.val --do the same for other 17 columns ,Col21 ,Col22 ,Col23 FROM t CROSS APPLY dbo.function1(Col1) A CROSS APPLY dbo.function1(Col2) B CROSS APPLY dbo.function1(Col3) C --do the same for other 17 columns より良い代替案はありますか? X個の列に対して複数のクエリで同じ関数を呼び出すことができます。 これが関数です: CREATE …

3
MySQLがグローバルルーチン(ストアドプロシージャや関数)を作成する可能性
どういうわけかグローバルに利用可能なルーチンを定義することは可能ですか?すべてのルーチンはデータベースのスコープ内で作成する必要があるようです。 (事前に発行せずにuse dbname)コンソールからルーチンを作成しようとすると、エラーが発生します。 ERROR 1046 (3D000): No database selected 同一のデータベースが大量にあり(データは異なります)、いくつかのテーブル名に対していくつかのトリガーを作成することが目標です。ただし、実行するルーチンは1つだけにしたいので、データベースごとにこれらのルーチンを作成する必要はありません(これらは同じなので、ルーチンは各データベースで同じように動作します)。

3
配列フィールドを持つテーブルタイプをpostgresqlの関数に渡す方法
本というテーブルがあります CREATE TABLE book ( id smallint NOT NULL DEFAULT 0, bname text, btype text, bprices numeric(11,2)[], CONSTRAINT key PRIMARY KEY (id ) ) そして関数save_book CREATE OR REPLACE FUNCTION save_book(thebook book) RETURNS text AS $BODY$ DECLARE myoutput text :='Nothing has occured'; BEGIN update book set bname=thebook.bname, btype=thebook.btype,bprices=thebook.bprices WHERE id=thebook.id; IF …

3
中央データベースに関数を作成するか、各データベースで繰り返しますか?
私の開発者の1人が、VB.Net関数(LastIndexOf)のように機能し、それを公開したいSQL関数を作成しました。私の質問は、これを中央データベースに配置するのではなく、各ユーザーデータベースに配置する理由は何ですか? 開発者はそれを自分のマスターデータベースのsysスキーマに配置しようとしていたため、ユーザーデータベースからの呼び出しを修飾する必要はありませんでした...ため息 しかし、私はそれを(明らかにマスターデータベースではなく)各ユーザーデータベースに対して集中化するための有効な言い訳が何であるかがわかりませんでしたか?

3
ユーザー定義の集計関数を作成するにはどうすればよいですか?
MySQLが提供していない集約関数が必要です。 MySQLのSQLフレーバー(つまり、Cではない)にしたいのですが。 どうすればよいですか?私が行き詰まっているのは、集約関数を作成することです- ドキュメントは、これがどのように行われるかについて言及していないようです。 product関数の望ましい使用法の例: mysql> select product(col) as a from `table`; +------+ | a | +------+ | 144 | +------+ 1 row in set (0.00 sec) mysql> select col, product(col) as a from `table` group by col; +-----+------+ | col | a | +-----+------+ | 6 | 36 | …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.