Question: I built an electron application on macOS for windows using electron-builder.
script: npm run pre-build-electron && electron-builder build --win --publish never
I ran this script and generated .exe file.
when i tried installting this .exe file in windows the installer runs for a second or two and after that this error is being thrown.

Error: Windows is searching for xxxx.exe. To locate the file yourself, click Browse.
-> On the top of the error the title is Missing Shortcut.

And when i try to browse i can only find uninstaller of that specific app.

This is my build code

```js
{
    "appId": "org.management.system",
    "productName": "Management System",

    "files": [
      "build/**/*",
      "electron/main.js",
      "package.json",
      "icon.ico"

    ],
    "publish": [
      {
        "provider": "github",
        "owner": "xxxxx",
        "repo": "frontend-release"
      }
    ],
    "extends": null,
    "win": {
      "target": "nsis",
      "icon": "build/icon.ico"
    }

  }
```

I cannot find the reason why the installer is not working when i build it in macOS. The same build when built on a windows system with same code and package.json everything works fine. Can anyone help me identify the reason.
Thanks in advance

Answer: 
Try the following. CHange

```
MATCH(twitter_user.description) AGAINST('founder')

```

to

```
MATCH(twitter_user.description) AGAINST('+founder' IN BOOLEAN MODE)

```

Also, the `DISTINCT` may not be necessary.

**IODKU?**

Buried in a comment I see a `DELETE` + `INSERT` that makes for a lot of churn in part of the table.

* InnoDB's FULLTEXT *may not* be efficient in such cases
* If most of the rows aren't changing, then the delete+insert is inefficient and cause more churn than may be necessary.

Look at `INSERT ... ON DUPLICATE KEY UPDATE ...` to see if that can be used instead of the delete+insert. If most of the rows don't change, then this will probably be faster and probably have less impact on things such as the Fulltext index.

If that Delete does actually remove some rows, then the IODKU (upsert) won't suffice. A second pass using something like `INSERT ... SELECT ... LEFT JOIN` may be the solution for inserting "new" rows. (I allude to such in a different context here: [*Normalization*](http://mysql.rjweb.org/doc.php/staging_table#normalization); see SQL#1.)

Periodically (weekly?), run `OPTIMIZE TABLE`. But keep some timings to see if this step really helps.

**2 steps**

First, I am still unclear about the data you receive every hour. Is it just info about one user? Does it include rows to delete with some indication that they are to be deleted instead of updated? Etc.

If it is a single user...

* `DELETE` only the rows that need deleting. This involves a multi-table Delete with a `LEFT JOIN` to see what is missing.
* `INSERT ... SELECT ... LEFT JOIN ...` to either insert or update the existing rows.
An option to try, in an attempt to minimise overheads and maximise any short-circuiting

```
SELECT
   `twitter_user`.`id`
FROM
  `twitter_user`
WHERE
  MATCH(twitter_user.description) AGAINST ('+founder' IN BOOLEAN MODE)
  AND
  EXISTS (
    SELECT
      *
    FROM
      `twitter_user_follower`
    WHERE
          `follower_twitter_user_id` = `twitter_user`.`id
      AND `twitter_user_id` = 4899565692
      AND `follower_download_id` = 7064
  )
LIMIT 20
OFFSET 0 

```