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

コアSQLステートメントであるSELECTは、1つ以上のテーブル、またはビューやテーブル値関数などの行セットデータの他のソースからデータを取得します。

4
mysql innodbデータベースのテーブル名+各テーブルのレコード数を表示する
現在のデータベース内のすべてのテーブルを、テーブルの行数とともにリストする方法。 言い換えれば、mysqlでこのようなものを作成するクエリを考えることができますか? +------------------------++------------------------+ | Tables_in_database | Number of rows | +------------------------++------------------------+ | database 1 | 1000 | | database 2 | 1500 | +------------------------++------------------------+ さまざまなアプローチを歓迎します。
10 mysql  innodb  select  count 

2
SELECTは、VACUUMのようにデッド行を削除しますか?
私はいじくり回していて、テーブルから行をingすることで、後で行う必要のある作業が減るようVACUUMな予期しない動作に気づきました。SELECTVACUUM テストデータ 注:自動バキュームは無効になっています CREATE TABLE numbers (num bigint); ALTER TABLE numbers SET ( autovacuum_enabled = 'f', toast.autovacuum_enabled = 'f' ); INSERT INTO numbers SELECT generate_series(1, 5000); 試験1 次に、すべての行に対して更新を実行します。 UPDATE numbers SET num = 0; そして走るVACUUM (VERBOSE) numbers;と、 INFO: vacuuming "public.numbers" INFO: "numbers": removed 5000 row versions in 23 pages INFO: …

2
選択クエリは必要以上に時間がかかります
私は、MySQLデータベーステーブルに約2300万件のレコードがあります。一意のものがないため、このテーブルには主キーがありません。2つの列があり、両方にインデックスが付けられています。以下はその構造です。 以下はそのデータの一部です。 今、私は簡単なクエリを実行しました: SELECT `indexVal` FROM `key_word` WHERE `hashed_word`='001' 残念ながら、これはデータを取得して表示するのに5秒以上かかりました。私の将来のテーブルには1500億のレコードがあるため、今回は非常に高いです。 私はExplainコマンドを実行して何が起こっているのかを確認しました。結果は以下のとおりです。 次に、以下のコマンドを使用してプロファイルを実行しました。 SET profiling=1; SELECT `indexVal` FROM `key_word` WHERE `hashed_word` = '001'; SHOW profile; 以下はプロファイリングの結果です。 以下は私のテーブルに関するいくつかの詳細です: では、なぜこれほど時間がかかるのでしょうか。それらもインデックス化されています!将来はたくさんのLIKEコマンドを実行する必要があるので、時間がかかりすぎています。何が悪いのでしょうか?

3
LIMITで行数をCOUNTする方法は?
X行をキャッチしたいので、を設定しLIMIT Xます。しかし、行の総数も同時に数えるにはどうすればよいですか? 現在、私は2つの別々のクエリを使用してそうしています SELECT COUNT(*) FROM col WHERE CLAUSE SELECT * FROM col WHERE CLAUSE LIMIT X これを1つのクエリで行う方法はありますか? 編集:出力はcolセルと行数でなければなりません。実際、colセルを選択した後は、テーブルの上を歩いて数えるだけです。 最初の行は1行を返し、2番目のX行を返すため、これら2つのクエリをマージすることはできません。が存在する場合にmysqlに行数を返す関数があるかどうか、私は興味がありLIMITます。

2
MySQL SELECTステートメントのTIMESTAMPフィールドのWHERE条件の最適化
使用時間を追跡する分析システムのスキーマに取り組んでいます。特定の日付範囲の合計使用時間を確認する必要があります。 簡単な例を挙げると、このタイプのクエリは頻繁に実行されます。 select sum(diff_ms) from writetest_table where time_on > ("2015-07-13 15:11:56"); 通常、このクエリは、データが密集しているテーブルで約7秒かかります。約3,500万行、Amazon RDS(db.m3.xlarge)で実行されているMySQLのMyISAMがあります。 WHERE句を削除すると、クエリの所要時間がわずか4秒になり、2番目の句(time_off> XXX)を追加すると、さらに1.5秒追加され、クエリ時間が8.5秒になります。 私はこれらのタイプのクエリが一般的に行われることを知っているので、それらをより速く、理想的には5秒未満に最適化したいと思います。 私はtime_onにインデックスを追加することから始めましたが、WHERE "="クエリは大幅に高速化しましたが、 ">"クエリには影響がありませんでした。WHERE ">"または "<"クエリを高速化するインデックスを作成する方法はありますか? または、このタイプのクエリのパフォーマンスについて他に提案がある場合は、お知らせください。 注:「diff_ms」フィールドを非正規化ステップとして使用しています(time_off-time_onと同じです)。これにより、集約のパフォーマンスが約30%から40%向上します。 私はこのコマンドでインデックスを作成しています: ALTER TABLE writetest_table ADD INDEX time_on (time_on) USING BTREE; (「time_on>」を使用して)元のクエリで「explain」を実行すると、time_onは「possible_key」であり、select_typeは「SIMPLE」です。「追加」の列は「使用場所」を示し、「タイプ」は「すべて」です。インデックスが追加された後、テーブルは「time_on」が「MUL」キータイプであることを示しています。これは、同じ時間が2回存在する可能性があるため、正しいように見えます。 これがテーブルスキーマです: CREATE TABLE `writetest_table` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `sessionID` int(11) DEFAULT NULL, `time_on` …

2
select(SQL Server)内で変数を使用する方法
列を計算し、その結果を複数の列で使用する場合、計算を2回行わずにこれを行うにはどうすればよいですか? 例: SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail ,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail FROM sometable 複数のselectを使用せずにこれを2回書くことを避けるにはどうすればよいですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.