Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

In các số nguyên tố với truy vấn SQL

Trong PostgreSQL, có lẽ truy vấn nhanh nhất in ra các số nguyên tố lên đến 1000 là:

SELECT regexp_split_to_table('2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997',E',')::int
AS x
;

Chỉ mất 16 mili giây trên máy tính của tôi.

Nếu bạn thích SQL hơn, thì điều này sẽ hoạt động

WITH x AS (
  SELECT * FROM generate_series( 2, 1000 ) x
)
SELECT x.x
FROM x
WHERE NOT EXISTS (
  SELECT 1 FROM x y
  WHERE x.x > y.x AND x.x % y.x = 0
)
;

Nó chậm hơn hai lần - 31 mili giây.

Là phiên bản tương đương cho Oracle:

WITH x AS(
    SELECT level+1 x
    FROM dual
    CONNECT BY LEVEL <= 999
)
SELECT x.x
FROM x
WHERE NOT EXISTS (
  SELECT 1 FROM x y
  WHERE x.x > y.x AND remainder( x.x, y.x) = 0
)
;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn tốt về cách cập nhật cơ sở dữ liệu Mysql của bạn với một biểu mẫu PHP?

  2. Elastic Beanstalk không tạo Tham số RDS

  3. 8 cơ sở dữ liệu phổ biến nhất

  4. Python - tự động hóa chỉ mục MySQL:truyền tham số

  5. Google Maps Lưu đa giác và các điểm trong MySQL bằng PHP