最初にランダムな方法についてどう思いますか?これはあまりにも貧しいですか?ランダムT-SQLの最適化
Iは、テーブルTABLE_A有する:
id | name | state
---------------------|----------
1703248 | blablabla | 1
... | blablabla | 0
7873415 | blablabla | 1
7926033 | blablabla | 1
ID列は、例えば 'zxg-76354GH-34347' のように、あまりにもalfanumeric値を含めることができます。 さて、私には3060のレコードがあります。
詳細:
select count(1) from TABLE_A where id like 'n%'
場合:ランダム化
n=1 ---> 201 records , n=2 ---> 147 records , n=3 ---> 187 records
n=4 ---> 327 records , n=5 ---> 430 records , n=6 ---> 503 records
n=7 ---> 1175 records , n=8 ---> 35 records , n=9 ---> 55 records
私のストアドプロシージャ:
--Name: Randomize_sp
BEGIN
DECLARE @temp table(id varchar(50))
--RANDOM 1
INSERT INTO @temp
SELECT id FROM TABLE_A
WHERE state > 0
ORDER BY RAND(CHECKSUM(NEWID()))
--RANDOM 2
SELECT top 1 id FROM @temp ORDER BY RAND(CHECKSUM(NEWID()))
END
私は私が必要とする何回か 'N' 回(ストアドプロシージャことを呼び出しますこれを行うには):
BEGIN
DECLARE @nTimes int, @i int
DECLARE @tempT table(id varchar(50))
SET @nTimes = 12
SET @i = 0
WHILE @i < @nTimes
BEGIN
INSERT INTO @tempT
EXECUTE MyDB.dbo.Randomize_sp
SET @i = @i + 1
END
SELECT id FROM @tempT
END
問題は、常に「7」で始まる4行または5行、時には「5」で始まる3行または2行が得られます... は繰り返しを避けたいと思います。私はどんな提案も歓迎する。
ありがとうございました。
私はあなたが何をしようとしているのか本当に理解していません。 Id値をランダム化したいのですか?50文字のランダムな文字が必要ですか? – Lamak
はい、ランダム化するId値が必要ですが、私はORDER BY RAND(CHECKSUM(NEWID()))を実行していますが、 '743432' y '75469'のような繰り返しは避けてください。それを望んでいないか、私はその繰り返しを減らす必要があります。私は、全体の約50%が '7'で始まるレコードであるため、このパターンのIDがより多くの確率を持つので、 – jlrvpuma
あなたはその場合にあなたのIDに 'NEWID()'を使うことができます。しかし、本当に1から50までのランダムな文字が必要な場合は、はるかに複雑なアルゴリズムが必要です – Lamak