問題タブ [query-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - 数値より大きいnvarcharをフィルタリングする方法は?
BigMacs nvarchar(255)列を持つMSSQLテーブルMcTableがあります。BigMacsの値が5より大きい行を取得したいと思います。
私がしていることは:
その結果、エラーが発生します。
状態1、67行目nvarchar値'***'をデータ型intに変換するときに変換に失敗しました。
しかし、最後のフィルターを削除するwhere Cast(table.BigMacsL as int) > 5
と機能し、次の結果が得られます。
そして、最初のクエリで'select*from'から'selecttop 18 * from'に変更すると、エラーも発生しません。
何が問題なのか、どうやって動かすのかわかりません!手伝っていただけませんか?
繰り返しになりますが、ここで達成しようとしているのは、BigMacsの値が5より大きいこれらのMcTable行を取得することです。
アップデート
このエラーを再現する手順:
データベースでこのエラーを簡単に取得できるように、クエリを用意しました。
データベースTestDBを作成し、次のコマンドでテーブルを作成します。
次の値を挿入します:
このクエリ:
以下に示すように、有効な数値になります。
54543534
54534534
454
そして、このクエリでフィルタリングされた値を取得しようとすると、次のようになります。
発生しないはずの次のエラーが発生するはずです。
メッセージ245、レベル16、状態1、行1 nvarchar値'fd'をデータ型intに変換するときに、変換に失敗しました。
database - 効率的なデータ アクセスを実現するために、MVC モデルの適切なバランスとは何ですか?
私は、MVC フレームワークを使用するいくつかの PHP プロジェクトに取り組んでいます。それらはすべて、データベースからオブジェクトを取得するさまざまな方法を持っていますが、速度と数の削減に関しては、手動で SQL クエリを記述することに勝るものはないように常に思えます。クエリ。
たとえば、私の Web プロジェクト (若手開発者が作成) の 1 つは、ホームページをロードするためだけに 100 を超えるクエリを実行します。その理由は、ある場所ではメソッドがオブジェクトをロードしますが、コードの後半で、最初のオブジェクトに関連する他のオブジェクトをロードするからです。
これは、コードの一部でいくつかの列の値のみを必要とし、別の部分で何か他のものを必要とするテーブルがある状況で、人々は何をしているのかという質問の別の部分につながります。現在 (同じプロジェクト内)、オブジェクトごとに 1 つの get() メソッドがあり、「SELECT *」を実行する (またはテーブル内のすべての列を明示的にリストする) ため、何らかの理由でいつでもオブジェクトが必要になります。あなたはすべてを手に入れます。
つまり、 SELECT * がいかに悪いかという話をよく耳にしますが、フレームワークに付属の ORM クラスを使用しようとすると、通常はそれを実行しようとします。SELECT * を使用して ORM を選択するのではなく、特定の SQL クエリを手動で作成することにこだわっていますか? 便利さと効率の間で立ち往生しているように思えます。クエリを手書きすると、列を追加すると、コードのいくつかの場所に追加する必要が生じる可能性が高くなります。
長い質問で申し訳ありませんが、特定の解決策ではなく、他の開発者からいくつかの考え方を得るための背景を説明しています。Memcached のようなものをいつでも使用できることはわかっていますが、その前にできることを最適化したいと思います。
アイデアをありがとう。
sql - 大きなテーブルの「カウント」よりも速いものはありますか?
これが私のクエリです:
テーブルの文語には、wordid、文 ID、および主キー ID の 3 つのフィールドが含まれています。35万行以上あります。このクエリにはなんと 85 秒かかりますが、100 を超えるセンテンス ID を持つすべてのワード ID を見つけるためのより高速な方法があるのではないかと考えています (願っていますか、祈っていますか?)。
select count の部分を取り出して、'having count(1)' を実行してみましたが、どちらも速度が上がりません。
あなたが貸してくれる助けをいただければ幸いです。ありがとう!
sql-server - Oracle Developer/DBA用のSQLサーバー
私はオラクルでの開発に数年の経験があり、現在はSQLサーバーを使用する場所に移動しています(2005)。SQL Serverのクエリの最適化、基本的なdbaの内容、私の経歴を持つ人のためのSQLServerの落とし穴などを学ぶのに適した場所はどこでしょう。
ありがとう!
sql - SQL クエリ ヘルプ: その月の従業員をランダムに選択する
このステートメントからレコードを取得する方法を誰か教えてもらえますか
- 過去 x か月の月間最優秀従業員ではない従業員をランダムに選択します
テーブル 従業員
ID
従業員名
テーブル EmployeeOfTheMonth
ID
EmployeeID
MonthStartedDate
MonthEndedDate
どうもありがとうございました
sql - MySQLインデックステーブルとは何ですか?
クエリを高速化する必要があります。インデックステーブルは私が探しているものですか?もしそうなら、どうすればそれを作ることができますか?挿入するたびに更新する必要がありますか?
テーブルスキーマは次のとおりです。
そしてクエリ:
sql - MySQL MyISAMテーブルのパフォーマンス...痛々しいほど、痛々しいほど遅い
次のように要約できるテーブル構造があります。
3600行あります
ページグループを参照します。10000行あります。ページグループごとに1〜700行の範囲で指定できます。データ列のタイプはmediumtextで、列には1行あたり100k〜200kバイトのデータが含まれます
参照ページ; 約300,000行あります。1ページあたり約1〜50行にすることができます
上記の構造は非常に単純です。問題は、インデックスを作成する必要のあるすべての列にインデックスを付けたにもかかわらず、userdataからページグループへの結合が非常に遅くなることです。このような結合(userdatainner_joinページinner_joinページグループ)のクエリを実行するために必要な時間は3分を超えています。データ列をまったく選択していないことを考えると、これは非常に遅いです。時間がかかりすぎるクエリの例:
なぜそんなに時間がかかるのか、そしてそれを速くするために何ができるのかを説明するのを手伝ってください。
編集#1
次のジブリッシュのリターンを説明します。
編集#2
この話の教訓
このようなパフォーマンスの問題が発生した場合は、中/長のテキスト列を別のテーブルに保持してください。
sql - MySQL MyISAM テーブルのパフォーマンスの問題の再訪
この質問はこれに関連しています。
次の構造のページテーブルがあります。
データ列には、レコードあたり約 80KB ~ 200KB のサイズのテキストが含まれます。データ列に格納されるデータの合計サイズは約 1.5GB です。
このクエリの実行には0.08秒かかります。
ただし、このクエリの実行には約130.0秒かかります。
ご覧のとおり、page.pageid にプライマリ インデックスがあり、page.sourceid にインデックスがあります。では、2 番目のクエリにはそれほど時間がかかるのでしょうか?
編集#1
EXPLAINが返されました
申し訳ありませんが、プロファイリングが機能しませんでした... MySQL (4.1.22) は SHOW PROFILE クエリを認識しませんでした。
SHOW INDEXが返されました
sql - SQL (任意) クエリの最適化に関する洞察のリクエスト
膨大な量の情報が結合されているため、クエリが特に遅くなります。ただし、id in (select id from table) の形で where 句を追加する必要がありました。
次のことから何か利益があるかどうか、さらに差し迫ったことで、望ましい結果が得られるかどうかを知りたい.
代わりに:
更新: MySQL より具体的にはできません。申し訳ありませんが、テーブルは実質的に 7 つの異なるテーブル間の結合です。* の使用は例です
編集、b が選択されない
mysql - MySQL で UNION クエリが非常に遅いのはなぜですか?
2 つの単一クエリを 0.02 秒未満で実行するように最適化するとUNION
、結果のクエリの実行に 1 秒以上かかります。また、UNION ALL
は よりも時間がかかりますUNION DISTINCT
。
重複を許可すると、クエリの実行が速くなり、遅くはならないと思います。2 つのクエリを別々に実行したほうがよいのでしょうか? を使用することをお勧めしますUNION
。
私が行う場合の簡単な例として
0.001秒かかります
もしそうなら
0.1 秒かかります。
次に実行すると
1秒以上かかります。